默认绑定
隐式绑定
隐式丢失
显式绑定 call apply bind (API调用的"上下文")
new 绑定
被忽略的 this
如果你把 null 或者 undefined 作为this的绑定对象传入 call apply bind 这些值在调用时会被忽略,实际应用的时默认绑定规则
小结
如果要判断一个运行中的函数的this绑定,就需要找到这个函数的直接调用位置。找到之后就可以顺序应用下面这四条规则来判断 this 绑定对象
1,由 new 调用? 绑定到新创建的对象
2,由 call apply 或者 bind 调用?绑定到指定对象
3,由上下文对象调用?绑定到上下文对象
4,默认:在严格模式下绑定到 undefined,否则绑定到全局对象
ES6中箭头函数并不会使用四条标准的绑定规则,而是根据当前词法作用域来决定 this 具体来说,箭头函数会继承外层函数调用的 this 绑定 (无论this绑定到什么)
这其实和ES6之前代码的 self = this 机制一样