(func)()和(func).call(窗口)之间的区别

时间:2018-04-19 16:29:43

标签: javascript self-invoking-function

我正在研究如何使用angularjs创建一些插件,其中一些插件我遇到过这个问题:

(function() {
    'use strict'
    //code...
}).call(window);

与使用下面的自调用函数有什么不同?

(function() {
    'use strict'
    //code...
})();

1 个答案:

答案 0 :(得分:2)

这两个调用将具有不同的this值。

此代码

(function() {
    'use strict'
    console.log(this)
})();

将记录undefined,因为严格模式函数的直接非方法调用使用this undefined值。

此代码

(function() {
    'use strict'
    console.log(this)
}).call(window);

将记录window,因为call的第一个参数用于向正在调用的函数提供this

如果我不得不猜测,我会说这是为了模仿使用window(而不是undefined)对于非{n}的this的非严格行为 - 方法调用。如果您的意思是window,请简单地使用window