2013-02-25 78 views
0

考虑以下两个代码示例:JS函数封装

// Example 1 
$('#myButton').click(function() { 
    alert('I was clicked'); 
}); 

// Example 2 
$('#myButton').click(
    alert('I was clicked'); 
); 

为什么要注意,它例如2不工作?

+0

因为传递函数的引用而另一个传递调用alert函数的**结果**。 jQuery.click()需要一个函数引用作为它的参数,它在[API文档](http://api.jquery.com/click/)中引用为_handler_。 – jahroy 2013-02-25 22:48:15

+0

@jahroy看看我看到的文档.click(handler(eventObject))我一直被表示参数时使用的不同语法所困惑。看起来每个语言或个人都希望以不同的方式做到这一点。 – Rigil 2013-02-25 23:03:04

+0

是的,文档对于JavaScript和jQuery来说不像Java和C#那样一致......我认为当语言是强类型的时候它会容易得多!注意_handler_参数旁边的注释:“_每次触发事件时执行的函数._” – jahroy 2013-02-25 23:09:12

回答

4

你的第二代码段不起作用,因为它调用window对象(返回undefined)的alert()方法,并传递它返回值(因此,undefined),为处理程序以一个jQuery的click()方法目的。

undefined不是一个有效的事件处理程序,所以click()忽略它并且什么也不做(除了可能会在您的控制台上记录错误,具体取决于您的浏览器)。

您的第一个代码片段传递了一个真正的函数,该函数又调用alert()。由于它是一个函数,它可以被注册为一个事件处理程序。