Функция addEventListener ожидает функцию или объект, реализующий EventListener
в качестве второго аргумента, а не вызов функции.
Когда ()
добавляется к имени функции, это вызов функции, а не сама функция.
Редактировать: Как указано в других ответах и в комментариях, можно возвращать функции в Javascript.
Итак, для чего-то интересного, мы могли бы попробовать следующее. Из оригинального myAlert
мы можем немного изменить его, чтобы оно возвращало другое сообщение, в зависимости от параметров:
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
Здесь обратите внимание, что функция на самом деле возвращает функцию. Следовательно, для вызова этой функции потребуется дополнительный ()
.
Я написал немного HTML и Javascript для использования вышеуказанной функции. (Прошу прощения за мой нечистый HTML и Javascript, так как это не мой домен):
<script type="text/javascript">
function myAlert(msg)
{
return function()
{
alert("Message: " + msg);
}
}
</script>
<html>
<body>
<form>
<input type="button" value="Button1" onclick="myAlert('Clicked Button1')()">
<input type="button" value="Button2" onclick="myAlert('Clicked Button2')()">
</form>
</body>
</html>
Отображаются две кнопки, каждая из которых вызывает функцию myAlert
с различным параметром. После вызова функции myAlert
она сама вернет другую function
, поэтому ее необходимо вызывать с дополнительным набором скобок.
Конечный результат: при нажатии Button1
появится окно с сообщением Message: Clicked Button1
, а при нажатии Button2
появится окно с сообщением Message: Clicked Button2
.