nextplease.init = function() {...}是不带参数的函数。我希望nextplease.initfunction() {nextplease.init();}具有相同的行为。它们之间可能有什么区别(很明显,您可以为nextplease.init分配一些东西,但是我们排除它)?
特别是,window.addEventListener("load", nextplease.init, false);window.addEventListener("load", function() {nextplease.init();}, false);之间的行为是否可以有所不同?

我尝试查找的错误已在Objects in JavaScript defined and undefined at the same time (in a FireFox extension)中进行了描述。有人建议使用第一种而不是第二种形式可能会有所不同。

最佳答案

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

假设将nextple定义为:

nextplease = {};
nextplease.someCustomProperty = "hello";
nextplease.init = function () { alert(this.someCustomProperty); }

在第一个示例中,“this”的值将是DOM对象,并且警报将失败:
window.addEventListener("load", nextplease.init, false);

在第二种形式中,“this”的值将是nextplease对象,并且警报将显示“hello”:
window.addEventListener("load", function() {nextplease.init();}, false);

引用MDC文档:

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

关于javascript - JavaScript中的函数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2320201/

10-13 02:51