在JavaScript中进行IIFE调用

时间:2013-06-05 10:02:58

标签: javascript

我见过两种使用IIFE的方法(我知道还有更多):

(function(){
    console.log(this);
}).call(this);

(function(){
    console.log(this);
})();

有没有理由在第一个上使用.call(this)();不会在函数中产生相同的上下文吗?

1 个答案:

答案 0 :(得分:4)

这取决于代码的执行位置。

.call(this)this显式设置为您传递给.call的对象。仅使用();会将this设置为window(或严格模式下设置为undefined)。

如果代码在全局范围内执行,它将是相同的。如果没有,那么如果this未引用window(或undefined),您将获得不同的结果。

示例:

var obj = {
   foo: function() {
       (function(){
           console.log(this); // this === obj
       }).call(this); // this === obj

       (function(){
           console.log(this); // this === window
       })();
   }
};

obj.foo();

More information about this on MDN