JS中this的绑定
https://www.cnblogs.com/echolun/p/11962610.html
- 默认绑定
非严格模式下指向全局对象即window对象;严格模式下指向undefined - 隐式绑定
this指向调用该函数的对象;如果调用前存在多个对象,this指向距离调用自己最近的对象
作用域和原型链的区别:访问变量时,如果上级作用域中也找不到会报错;访问对象属性时,会顺着原型链寻找,原型链的顶端是null,所以没找到会返回undefined,而不是报错
隐式丢失:作为参数传递和变量赋值时可能发生的问题;丢失后默认指向全局对象 - 显式绑定
通过call(); apply(); bind()();方法改变this指向
call()与apply()的区别是传参方式不同;前者是散列的形式,后者是变量数组;两者都会在改变this的指向的同时执行函数。而bind返回一个绑定函数,需要再执行 - new绑定
- 箭头函数绑定
箭头函数的this指向取决于外层作用域中的this,外层作用域或函数的this指向谁,箭头函数中的this便指向谁。
一旦箭头函数的this绑定成功,也无法被再次修改
this绑定优先级:显式绑定/new绑定 > 隐式绑定 > 默认绑定