JavaScript中的函数值

Ale*_*nov 8 javascript closures

nextplease.init = function() {...}是一个没有参数的函数.我期望nextplease.init并且 function() {nextplease.init();}行为相同.它们之间是否存在任何可能的差异(显然,你可以分配一些东西nextplease.init,但是让我们排除它)?特别是,window.addEventListener("load", nextplease.init, false);和之间的行为会有不同window.addEventListener("load", function() {nextplease.init();}, false);吗?

我试图找到的错误在JavaScript中定义和未定义的对象中描述(在FireFox扩展中)有人建议使用第一种形式而不是第二种形式可能会有所不同.

Jef*_*ang 4

一个重要的区别是 nextplease.init 引用的函数体内“this”关键字的值。

假设 nextplease 定义如下:

nextplease = {};
nextplease.someCustomProperty = "hello";
nextplease.init = function () { alert(this.someCustomProperty); }
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,“this”的值将是 DOM 对象,并且警报将失败:

window.addEventListener("load", nextplease.init, false);     
Run Code Online (Sandbox Code Playgroud)

在第二种形式中,“this”的值将是 nextplease 对象,警报会说“hello”:

window.addEventListener("load", function() {nextplease.init();}, false);
Run Code Online (Sandbox Code Playgroud)

参考MDC文档:

https://developer.mozilla.org/en/DOM/element.addEventListener