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
的值是该函数被创建时
的作用域