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

Javascript binding event handler function by name

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
JavaScript: var functionName = function() {} vs function functionName() {}

为什么这样做......

1
2
3
4
5
$("#clickme").click( showAlert );

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

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

1
2
3
4
5
$("#clickme").click( showAlert );

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


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

1
2
3
4
function showAlert() {
   alert("Hiya" );
}
$("#clickme").click( showAlert );

而你的第二个被解释为:

1
2
3
4
5
6
var showAlert;
$("#clickme").click( showAlert );

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

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

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


第一个是Function Declaration..

第二个是function Expression..

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

所以第一种情况有效。第二种方法不起作用,因为在将函数分配给它时尚未定义,...

所以这会奏效

1
2
3
4
5
var showAlert = function() {
    alert("Hello" );
}

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

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