使用挂起Parens Vs Function.prototype.call调用函数表达式

时间:2016-02-05 21:32:45

标签: javascript

使用标准悬挂式parens方法调用函数表达式和在Javascript中使用.call有什么区别?

我有时会看到像

那样调用IIFE
(function(){
    //your code here
}).call(this);

而不是更标准的

(function(){
    //your code here
})();

使用.call有什么好处?

1 个答案:

答案 0 :(得分:4)

这取决于你的范围。

如果它在全局范围内,那么使用.call(this)绝对有效,因为this已经是window对象。

如果您位于某个嵌套范围内,并希望使用thisBindingthis),则使用.call(this)非常重要(或将this存储在变量中例如selfthat)。 IIFE将在全球范围内执行,因此其this绑定将更改为window。如果在该范围内尝试使用this,并且this未被正确绑定,则它将引用错误的对象。

以下是一个例子:



window.x = 5;

(function(){
    console.log(this.x);//5  
})()

var obj = {
    x : 6,
    test : function(){
      (function(){
          console.log(this.x);//5
      })()
    },
    close : function(){
     (function(){
          console.log(this.x);//6
     }).call(this)
    }
};

obj.test();
obj.close();