es6中箭头函数的this

文章类型:ES6

发布者:hp

发布时间:2025-03-01

一:定义

1:箭头函数的this在定义时确定,继承自父级作用域的this值,而非调用的对象

2:如果父级作用域是普通函数或者全局环境,则this指向父级的this或全局对象

3:若父级作用域仍是箭头函数,则继续向上查找,知道找到非箭头函数的this

二:适用场景

1:全局作用域定义

const fn = () => console.log(this);
fn(); // 输出 window(浏览器环境)‌:ml-citation{ref="1,6" data="citationList"}

2:作为对象方法

const obj = {
  name: 'obj',
  method: () => console.log(this.name)
};
obj.method(); // 输出 undefined(this 指向全局对象)‌:ml-citation{ref="5,6" data="citationList"}

3:嵌套在普通函数中

function outer() {
  const inner = () => console.log(this);
  inner();
}
outer.call({name: 'test'}); // 输出 {name: 'test'}‌:ml-citation{ref="3,4" data="citationList"}

三:注意点

1:避免在对象方法中使用箭头函数,对象方法动态绑定this时,箭头函数会导致this错误指向全局

2:无法通过常规方法修改this

3:与class结合时,this指向class实例

四:拓展

(1)剪头函数的this跟普通函数this的区别

1:特性上

普通函数this=>动态绑定,取决于函数调用方式,可能是全局、调用它的或显示绑定的对象

剪头函数this=>没有自己的this,会捕获上下文的this作为自己的this,无论怎么调用,始终保持不变

2:可修改性上

普通函数this=>可通过call\apply\bind修改

剪头函数this=>不可修改

3:arguments对象上

普通函数=>存在

箭头函数=>不存在

五:总结

1:箭头函数的this始终静态绑定到定义时的父级作用域

2:解决了传统函数this的动态绑定导致混淆问题

评论
0条评论遵守法律,文明用语,共同建设文明评论区

暂无评论,快来发表第一条评论吧~