这两个都是指同一个变量?

Exi*_*tos 2 javascript

我有一个非常混乱的情况......

(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旨在保护国际范围内的内部人员?

Den*_*ret 5

在这两种情况下,thiswindow,在调用内部函数表达式时,全局默认上下文将替换您未提供的上下文.

如果要保留上下文,请不要在内部使用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)