在github上查看code时,我发现了以下内容:
(function() {
}).call(this);
这显然是一个自我调用的匿名函数。但为什么这样写呢?我习惯于看到规范变体(function() {})()
。
使用.call(this)
进行自调用匿名函数有什么特别的好处吗?
编辑:看起来有些commonjs环境将this
设置为模块顶层的非全局值。哪些,以及他们将this
设置为您可能要保留的内容?
答案 0 :(得分:26)
默认情况下,调用(function(){/*...*/})()
之类的函数会将函数中this
的值设置为window
(在浏览器中),而不管this
的值是多少可能在创建函数的封闭上下文中。
使用call
可以手动将this
的值设置为您想要的任何值。在这种情况下,它将其设置为封闭上下文中this
的值。
举个例子:
var obj = {
foo:'bar'
};
(function() {
alert( this.foo ); // "bar"
}).call( obj );
您可以看到我们能够将this
的值手动设置为obj
变量引用的对象。
答案 1 :(得分:5)
.call(this)
(实际上只是()
,直到我更改它)确保您的顶级this
通过严格模式,--bare
选项和/或运行环境保持一致(顶级this
未指向全局对象)。
答案 2 :(得分:0)
使用:
> (function() {
> ...
> }).call(this);`
然后将代码范围内的(全局对象的probaby)设置为函数的 this 对象。据我所知,它相当于:
(function(global) {
// global references the object passed in as *this*
// probably the global object
})(this);
在浏览器中,通常 window 是(或表现得像)全局对象的别名。
答案 3 :(得分:-3)
自动调用函数对于在加载脚本时立即执行其内容非常有用。这可以方便地初始化全局范围元素。