this的绑定

2 阅读1分钟
  • 普通函数:this 看调用方式

  • 箭头函数:this 看定义时外层

  • call / bind 能改普通函数的 this,改不了箭头函数

这里输出的x是10. 因为箭头函数的x是在定义时候就决定了的.而这里定义的时候getX绑定了foo的实例.foo的实例绑定的x就是10.

属于运行时创建

  • 先定义了一个普通函数 Foo
  • 等以后你真的执行 Foo()new Foo()
  • JS 才会进入 Foo 函数体
  • 执行到这一行时,现场创建 这个箭头函数
  • 然后把它赋值给 this.getX
function Foo() {
  this.x = 10
  this.getX = () => this.x
}

const f = new Foo()
const g = f.getX

console.log(g())