我知道提升的一般规则,变量和函数在编译阶段就会被提升。
因此,任何内容都可以写成以下内容
var foo = 'global';
将被编译为,
var foo; // Undefined
foo = 'global'; // Declared
但这是我无法理解的
<小时/>var foo = 'global';
var myObject = {
foo: 'local',
func: function(){
console.log(this.foo); // Local
(function(){
console.log(this.foo); // Global
})();
}
}
myObject.func();
为什么 myObject
中的自调用函数打印全局 foo/并获取 window 的上下文?
总的来说,我想了解的是它在哪里被吊起。
最佳答案
在调用 console.log(this.foo)
之前添加 console.log(this);
,您将看到 this
本质上只是窗口
。这就是为什么您会获得全局 foo
。
函数中this
的默认值在直接调用时是“全局对象”;在浏览器中,全局对象是window
。在这种情况下,您也会看到窗口
:
function foo() {
console.log(this);
}
foo();
由于您已经定义了一个函数表达式并立即调用了它,因此它本质上是直接调用该函数(类似于直接调用常规函数的方式)。
关于javascript - JavaScript 中的自调用函数中的提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429274/