箭头函数this?

var obj = {
  a: 10,
  b: () => {
    console.log(this.a); // undefined
    console.log(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
  }
}

MDN中阐述:在箭头函数中,this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象

想问下封闭词法环境到底是什么环境?

阅读 3k
2 个回答

MDN里不是有附例子说明吗?
意思就是在箭头函数中的this和箭头函数外的this是一致的。而且是绑定的,不受bind/call/apply干扰的
比如说

var _this = this;
var obj = {
  name: 'obj',
  b: () => {
    // 这里的 this 同 obj 所处作用域的this是一致的 即 this === _this
    console.log(this === _this)
  }
}
obj.b() // true
obj.b.bind({x: 1})() // true
obj.b.call({y: 2}) // true

如果你的箭头函数的外层还是一个箭头函数的函数体那么继续往上查找this,直到全局作用域即最外层this既window【严格模式为undefined】。有点在作用域链中查找变量的感觉。

包含它的,并且离他最近的,并且有 this 的词法环境。

函数,除箭头函数之外,都有 this 。(虽然有时值是 undefined)

全局环境,有 this

其它都没有。(很多 {} 可以提供词法环境,但是 object literal 的 {} 不能,比如你代买里最外面那一对)

如果就这点代码的话,你这个箭头函数之外,就只有全局环境了。

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