nextplease.init = function() {...}
是不带参数的函数。我希望nextplease.init
和function() {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/