【发布时间】:2017-09-11 18:15:05
【问题描述】:
我知道提升的一般规则,变量和函数在编译阶段被提升。
所以写成下面这样
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的上下文?
总的来说,我想了解的是它在哪里被吊起。
【问题讨论】:
-
因为 IIFE 中的
this是window。调用它的执行上下文是全局上下文。这是因为函数没有在obj.func()这样的对象上调用,所以this默认引用window。 -
不应该只在声明obj.func()时才执行自调用函数。
-
@patz 它与提升无关。你对context的理解不适合js...
标签: javascript