@Shimpanze

Почему возникает ошибка: Uncaught TypeError: my_function is not a function?

Здравствуйте!

Почему функция не видится?

Создаю функцию:

(function() {
  function my_function() {
    let script = document.createElement('script');
    script.type='text/javascript';
    script.text = `function allert() { alert('Ура!'); }`;
    document.getElementsByTagName('head').item(0).appendChild(script);
  }
})();


...функция появляется в шапке, с этим проблем нет.

Далее - вызываю её:

(function() {

    let button = document.createElement('button');

    button.innerHTML = 'Нажми меня';
    button.onclick = my_function();

    document.getElementById('body').appendChild(button);

  })();


Получаем ошибку: «Uncaught TypeError: my_function is not a function».
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Вы присваиваете результат функции а не саму функцию, попробуйте так:
button.onclick = my_function;
Дело в отм что когда пишешь "()" рядом с функцией то выполняется ее вызов и возвращается результат, который равен null в вашем случае, а когда нет возвращается указатель на функцию.
Ответ написан
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
my_function() заявлена в замыкании, и актуальна только для этого замыкания. Стало быть, чтобы назначить её обработчиком для чего-то, это что-то нужно в том же замыкании создавать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы