箭头函数不绑定自身this,而是继承外层作用域的this值;它用=>定义,无arguments、prototype、super和new.target,不能作为构造函数。
箭头函数是 JavaScript 中一种简洁的函数定义语法,它不绑定自己的 this,而是继承外层作用域的 this 值。这是它和传统函数最核心的区别之一。
箭头函数用 => 定义,省略 function 关键字,参数少时可省括号,单表达式可省大括号和 return:
const add = (a, b) => a + b;const sayHi = () => console.log('Hi');const obj = { name: 'Alice', getName: () => this.name }; // this 指向外层,不是 obj因为箭头函数在词法上“捕获”外层执行上下文的 this,而不是在调用时动态绑定。它没有自己的执行上下文(没有自己的 [[ThisBinding]]),所以不参与 this 的常规绑定规则(如默认绑定、隐式绑定、显式绑定、new 绑定)。
this 取决于**怎么被调用**(例如 obj.method() 中 this 是 obj)this 取决于**它在哪儿被定义**(即外层函数或全局作用域的 this)call、apply、bind 对箭头函数的 this 无效误用箭头函数容易导致 this 意外丢失,尤其在对象方法或事件回调中:
this 不指向该对象
正确:需要动态 this 时用普通函数;需要稳定继承外层 this 时用箭头函数(如 React 类组件中事件处理、定时器回调、Promise 链内)setTimeout(() => console.log(this.value), 100); —— 避免手动 bind(this)
除了没有 this,箭头函数也没有:
arguments 对象(可用剩余参数 ...args 替代)prototype 属性(不能用作构造函数,调用 new 会报错)super 和 new.target(在类中不可用)