Javascript绑定事件处理函数的名称

时间:2012-11-20 22:55:01

标签: javascript function binding

  

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

为什么这样做......

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

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

......但不是这个......?

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

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

2 个答案:

答案 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 );

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