我有一个非常混乱的情况......
(function sayStuff(){
this.word = "hello2";
(function (){
console.log(this.word);
}())
}())
var myObject = {
word: "bar",
func: function() {
(function() {
console.log(this.word);
}());
}
};
myObject.func();
Run Code Online (Sandbox Code Playgroud)
输出
hello2 hello2
这是怎么回事?如何在myObject的'func'上实际看到sayStuff()中引用的变量?我认为IIFE旨在保护国际范围内的内部人员?
在这两种情况下,this是window,在调用内部函数表达式时,全局默认上下文将替换您未提供的上下文.
如果要保留上下文,请不要在内部使用IIFE或使用上下文调用它们:
(function sayStuff(){
this.word = "hello2"; // still this is window, use var if you don't want that
(function() {
console.log(this.word); // window.word
}).call(this); // well, this is window...
}())
var myObject = {
word: "bar",
func: function() {
(function() {
console.log(this.word); // myObject.word
}).call(this);
}
};
myObject.func();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |