JS 中的 this 是一个相对复杂的概念, 不是简单几句能解释清楚的. 比较不负责任的说法是 this 的值取决于函数是如何调用的. 我阅读了网上很多关于 this 的文章, Arnav Aggrawal 写的比较清楚. this 取值符合以下规则:
- 通过
new关键字调用函数,this会是一个全新的object - 使用
apply,call或者bind来调用/创建函数,this的值取决于传入的第一个参数 - 如果函数作为对象的方法被调用, 比如
obj.method(),this的值为该函数所作为属性的object, 比如obj - 如果函数调用时不满足上述条件, 也就是
free function,this的值为全局对象. 浏览器环境下是window对象, 但是在严格模式下('use strict'),this的值为undefined - ES2015(ES6) 提出的箭头函数(Arrow function)不符合上述规则, 箭头函数
this的值是该函数被创建时的作用域