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?