Possible Duplicate:
JavaScript: var functionName = function() {} vs function functionName() {}
为什么这有效...
$("#clickme").click( showAlert );
function showAlert() {
alert( "Hiya" );
}
...但不是这个...?
$("#clickme").click( showAlert );
var showAlert = function() {
alert( "Hello" );
}
最佳答案
发生这种情况是由于hoisting .
在第一种情况下,代码被解释为(请注意如何首先评估函数声明):
function showAlert() {
alert( "Hiya" );
}
$("#clickme").click( showAlert );
你的第二个被解释为:
var showAlert;
$("#clickme").click( showAlert );
showAlert = function() {
alert( "Hello" );
}
由于 showAlert
是变量声明而不是函数声明(请注意 var
关键字),因此首先对变量声明求值,然后在绑定(bind)事件时求值处理程序中,声明了 showAlert
变量,但它包含 undefined
值。
这就是提升的作用:它将变量和函数声明提升到闭包的顶部。
hositing 上有一些很好的资源在那里,包括 here on SO .
关于Javascript 按名称绑定(bind)事件处理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483627/