ES6:JavaScript箭头函数的this指向与穿透问题
以一个例子引出:
1 |
|
打印中“郭德纲”没有出现,原因出在function(res){console.log(this.name+"喜欢"+res)}
这个回调函数上,这个匿名的回调函数没有绑定调用者(ES5中函数内this指向调用者),其内部的this无从指向,只能遵循匿名函数this指向windows这个规则去指向windows,而windows的name=’’
1、ES5解决回调函数this指向的方法:用that=this
1 |
|
此方法在回调函数以外将指向对象的this存在that中,再通过that.name
调用对象的name
2、JavaScript箭头函数的this指向与穿透
1 |
|
由于箭头函数的this指向是词法作用域,可以穿透至它的父级作用域,所以它的this指向和父级作用域的this指向一样
词法作用域关注函数在何处声明,而动态作用域关注函数从何处调用
词法作用域是在写代码或者定义时确定的,而动态作用域是在运行时确定的(this也是!)
3、箭头函数不适用的场景
1、构造函数不能使用箭头函数,因为构造函数需要绑定到对象身上
2、需要绑定到当前对象触发dom事件的时候
3、需要使用arguments,arguments可以接收函数的参数,箭头函数内没有arguments这个类数组的,需要再最外加一个(…arg)
1 |
|
ES6:JavaScript箭头函数的this指向与穿透问题
https://wwwhisperr.github.io/2022/10/01/page/