可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
为什么这样做......
$("#clickme").click( showAlert );
function showAlert() {
alert( "Hiya" );
}
......但不是这个......?
$("#clickme").click( showAlert );
var showAlert = function() {
alert( "Hello" );
}
答案 0 :(得分:4)
由于hoisting而发生这种情况 在第一种情况下,代码被解释为(注意如何首先评估函数声明):
function showAlert() {
alert( "Hiya" );
}
$("#clickme").click( showAlert );
你的第二个被解释为:
var showAlert;
$("#clickme").click( showAlert );
showAlert = function() {
alert( "Hello" );
}
由于showAlert
是变量声明而不是函数声明(注意var
关键字),因此首先计算变量声明,并在绑定事件处理程序时{{1声明变量,但它保存showAlert
值。
这就是提升的作用:它将提升变量和函数声明提升到闭包的顶部。
hositing上有一些很好的资源,包括here on SO。
答案 1 :(得分:3)
第一个是Function Declaration..
第二个是function Expression..
函数声明。
所以第一种情况有效。第二种方法不起作用,因为在将函数分配给它时尚未定义,..
所以这会起作用
var showAlert = function() {
alert( "Hello" );
}
$("#clickme").click( showAlert );
即,定义函数然后分配处理程序