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扩展中)有人建议使用第一种形式而不是第二种形式可能会有所不同.
一个重要的区别是 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
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |