Javascript 按名称绑定(bind)事件处理函数

标签 javascript function binding

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/

相关文章:

javascript - knockout dom 操作后回调 jquery 函数

c++ - 如何与另一个继承类的继承类对话

javascript - 使 Div 在函数中可见时出错

html - Knockout JS + Bootstrap + 图标 + html 绑定(bind)

binding - 调用 ko.applyBindings 后添加绑定(bind)

javascript - 如何在不访问 html 的情况下将 ng-app 添加到 html 元素

javascript - 如何解析 amcharts 股票日期

javascript - 调用 h :commandButton submit 后关闭模态面板

c++ - 内联还有用吗?

wpf - 绑定(bind)到 CompositeCollection 时,ComboBox 未选择正确的项目