为什么var eva = function(){}不适用于addEventListener()

时间:2013-12-06 14:13:57

标签: javascript events javascript-events

我不知道为什么下面的代码不起作用!但如果我将var eva = function(){alert("hello");}更改为function eva() {alert("hello");},则可行。

var myForm = document.forms["form1"];

myForm.addEventListener("submit", eva);

var eva = function() {
alert("hello");
}

2 个答案:

答案 0 :(得分:2)

eva未在您使用它的位置定义。

然而,这确实有效:

var myForm = document.forms["form1"];

var eva = function() {
alert("hello");
}

myForm.addEventListener("submit", eva);

答案 1 :(得分:2)

通过eva添加addEventListener函数时,它是一个未定义的变量。然后,将其设置为函数。基本上,当你像你一样写它时:

var myForm = document.forms["form1"];

myForm.addEventListener("submit", eva);

var eva = function() {
alert("hello");
}

你有效地写了这个:

var myForm = document.forms["form1"];
var eva; // = undefined    

myForm.addEventListener("submit", eva);

eva = function() {
    alert("hello");
}

var的声明获得hoisted,但不是作业。通过使用函数声明,function eva() { ... }获得类似hoisted到范围的顶部,并且在将其传递给addEventListener时是一个有效的函数。

所以,你有两个选择:

  1. 将var声明分配移至调用addEventListener之上。
  2. 使用函数声明。