使用标准悬挂式parens方法调用函数表达式和在Javascript中使用.call
有什么区别?
我有时会看到像
那样调用IIFE(function(){
//your code here
}).call(this);
而不是更标准的
(function(){
//your code here
})();
使用.call
有什么好处?
答案 0 :(得分:4)
这取决于你的范围。
如果它在全局范围内,那么使用.call(this)
绝对有效,因为this
已经是window
对象。
如果您位于某个嵌套范围内,并希望使用thisBinding
(this
),则使用.call(this)
非常重要(或将this
存储在变量中例如self
或that
)。 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();