Sea*_*lan 25 javascript module anonymous-function commonjs coffeescript
在github上查看代码时,我发现了以下内容:
(function() {
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这显然是一个自我调用的匿名函数.但为什么这样写呢?我习惯于看到规范的变体(function() {})().
使用.call(this)自动调用匿名函数有什么特别的优势吗?
编辑:看起来某些commonjs环境this在模块的顶层设置为非全局值.哪些,以及它们this可能想要保留的内容是什么?
use*_*716 26
默认情况下,调用函数(function(){/*...*/})()会将函数中的值设置this为window(在浏览器中),而不管this创建函数的封闭上下文中的值是什么.
使用call允许您手动将值设置为this您想要的任何值.在这种情况下,它将其设置this为封闭上下文中的值.
举个例子:
var obj = {
foo:'bar'
};
(function() {
alert( this.foo ); // "bar"
}).call( obj );
Run Code Online (Sandbox Code Playgroud)
您可以看到我们能够手动设置变量this引用的对象的obj值.
.call(this)(实际上()直到我更改它)确保您的顶级this通过严格模式,--bare选项和/或运行环境(顶级this不指向全局对象)保持一致.
| 归档时间: |
|
| 查看次数: |
6089 次 |
| 最近记录: |