this指向问题,为什么这里的this指向的是全局而不是被调用的地方?

var a = 1;
function foo() {
    var a = 2;
    this.bar();
}

function bar() {
    var a = 3;
    console.log(this.a);
}

foo(); // 1
阅读 3k
4 个回答

这样你就清楚了
你从头到尾都是在window这个this里调用的

window.a = 1;
function foo() {
var a = 2
window.bar()
}

function bar(){
var a = 3;
console.log(window.a)
}

window.foo()

为什么调用时,内部this会指向全局,你可以理解为这是js最初的一种设计缺陷,独立的函数调用,默认是指向全局window。

如果你想合理化理解,可以理解为foo定义在全局,默认也属于window的属性,foo()调用就等同于window.foo(),自然this也就是window了。

推荐问题