Почему у функции внутри функции события onclick не должно быть скобок?

1

Я некоторое время боролся с этой проблемой:

<input type="submit" onclick="barPlot(function1())">
<input type="submit" onclick="barPlot(function2())">

Где я пытался, посредством события onclick, разрешить моей функции "barPlot()" выбирать данные из различных функций.

Результат этого в моей функции barPlot, которая выглядела так:

function barPlot(callback) {

    var myData = callback();

    }

... был "обратный вызов не является функцией".

Когда я, наконец, попробовал это (удаление конечных скобок в вызове), он работал:

<input type="submit" onclick="barPlot(function1)">
<input type="submit" onclick="barPlot(function2)">

Это почему?

(Если у кого-то есть дополнительная критика моего способа сделать это, тогда вам разрешено свободно упоминать об этом. Это практика для меня).

  • 1
    Не относится к вашему вопросу, но поскольку вы упомянули критику: я рекомендую использовать современную обработку событий ( addEventListener и тому подобное), а не обработчики событий в стиле onxyz , которые требуют, чтобы функции, на которые они ссылаются, были глобальными. (И затем, конечно, сделать функции неглобальными, поскольку глобальное пространство имен действительно переполнено.)
  • 0
    Спасибо за это упоминание. У вас есть хорошие источники, на которые я мог бы посмотреть? Моя борьба как непрограммиста, несмотря на то, что я читал такие книги, как «JavaScript - хорошие части», состоит в том, что я абсолютно не представляю, какой ущерб я причиняю и как я должен структурировать свой код, особенно когда он становится большим. (Эта обработка глобальных функций особенно сложна для меня: как я должен держать их подальше от глобального пространства имен, в то же время, как я должен иметь возможность использовать их в одно и то же время) - Это просто как упоминание о том, как я с нуля сейчас работаю :)
Показать ещё 1 комментарий
Теги:
callback
onclick

2 ответа

2
Лучший ответ

Потому что, если вы добавляете родительские элементы, вы вызываете эту функцию и предоставляете внешнюю функцию значение, возвращаемое выполнением внутреннего.

1

Это происходит потому, что вы должны предоставить функцию в качестве обратного вызова, но если вы пишете круглые скобки, вы не предоставляете функцию. Вместо этого вы выполняете написанную функцию (из-за скобок) и предоставляете возвращаемое им значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню