要知道 this 指向问题,需要知道函数调用栈,函数调用的位置。

先来看看以下这个例子:

function baz() {
    // 当前调用栈:baz
    // 因此,当前调用位置是全局作用域

    console.log("baz")
    bar(); // bar 的调用位置
}

function bar() {
    // 当前调用栈是 baz -> bar
    // 因此,当前调用位置在 baz

    console.log("bar")
    foo(); // foo 调用位置
}

function foo() {
    // 当前调用栈是 baz -> bar -> foo
    // 因此,当前调用位置在 bar 中
    console.log("foo")
}

baz() // baz 的调用位置
绑定规则

独立函数调用

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

var a = 10
foo() // 10

在本例子中 this 默认指向了 window 全局对象

为什么呢?

因为,函数调用时不带其他修饰的函数调用,