Javascript绑定事件处理函数的名字

可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}

为什么这个工作...

$("#clickme").click( showAlert );

function showAlert() {
  alert( "Hiya" );
} 

...但不是这个...?

$("#clickme").click( showAlert );

var showAlert = function() {
    alert( "Hello" );
}

这是由于吊装发生的。
在你的第一种情况下,代码被解释为(注意如何首先评估函数声明):

function showAlert() {
   alert( "Hiya" );
}
$("#clickme").click( showAlert ); 

而你的第二个解释为:

var showAlert;
$("#clickme").click( showAlert );

showAlert = function() {
   alert( "Hello" );
}

由于showAlert是变量声明而不是函数声明(注意var关键字),所以首先计算变量声明,并且在绑定事件处理函数时,声明showAlert变量,但它保存undefined值。

这就是提升:它将变量和函数声明提升到闭包的顶部。
在这里有几个很好的资源,包括这里的SO。


第一个是Function Declaration..

第二个是一个function Expression..

函数声明在任何代码执行之前首先被读取。

所以第一个案件起作用。 第二种方法不起作用,因为在函数分配给它时,尚未定义它。

所以这会起作用

var showAlert = function() {
    alert( "Hello" );
}

$("#clickme").click( showAlert );

即定义函数,然后分配处理程序

链接地址: http://www.djcxy.com/p/2841.html

上一篇: Javascript binding event handler function by name

下一篇: What is the point of using a named function expression?