关于JS的this指向问题

function foo() {
    "use strict";
    
    console.log( this.a );
}

var a = 2;

foo(); // TypeError: Cannot read property 'a' of undefined

// --------------------------------------

function foo() { 
    console.log( this.a );
}

var a = 2;

(function() {
    "use strict";
    
    foo(); // 2
})();

请问,以上代码为什么第一部分this指向undefined,第二部分却指向window?

阅读 2k
1 个回答

(本回答不讨论箭头函数)

函数的里的 this ,是由如何调用决定的。一般 a.foo() 调用的时候,那么就是 a

如果没有 a 呢?这时要看被调用函数定义是否处于严格模式(与调用语句是否严格模式无关)。如果定义在严格模式,那么 thisundefined 。否则,一般就是全局对象了(比如浏览器里的 window)

例子里的第一个,foo 定义是严格模式。第二个,foo定义并不是严格模式。(虽然调用语句是严格模式里,但这与 foothis 如何决定无关。)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题