0

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

为什么这个工作...

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

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

……但不是这个……?

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

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

2 回答 2

4

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

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

你的第二个被解释为:

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

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

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

这就是提升的作用:它将变量和函数声明提升到闭包的顶部。
有一些关于托管的好资源包括在 SO 上

于 2012-11-20T23:03:55.663 回答
3

第一个是一个Function Declaration..

第二个是一个function Expression..

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

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

所以这会起作用

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

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

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

于 2012-11-20T22:59:01.137 回答