箭头函数不是语法糖,它改写了this、arguments、new.target和super的绑定规则:this继承外层作用域且不可变,不能用作构造函数,无arguments对象,不适用于需动态this或实例化的场景。

箭头函数不是语法糖,它改写了 this、arguments、new.target 和 super 的绑定规则——这点不理解就别用,否则闭包里 this 会突然指向 window 或 undefined。
箭头函数的 this 永远继承外层作用域
它没有自己的 this,不会根据调用方式改变,也不支持 call/apply/bind 覆盖。适合写回调,但绝不能当事件处理器或对象方法:
const obj = {
name: 'Alice',
regular() { console.log(this.name) }, // 'Alice'
arrow: () => console.log(this.name) // undefined(在模块顶层 this 是 {})
}
obj.regular() // ✅
obj.arrow() // ❌
- React 函数组件内部的事件处理用箭头函数没问题,因为外层是组件作用域
- Vue 选项式 API 中的
methods里不要用箭头函数,会丢失this.$data - 需要动态
this的场景(如 jQuery 插件、原生事件监听器)必须用function
箭头函数不能用作构造函数
它没有 prototype,调用 new 会直接抛 TypeError: xxx is not a constructor:
const Person = (name) => ({ name })
new Person('Bob') // ❌ TypeError
- 要创建实例对象,必须用
function声明或class - 工厂函数(返回新对象但不依赖
new)可以用箭头函数,比如const createBtn = (text) => ({ type: 'button', text })
没有 arguments 对象,但可用剩余参数替代
传统函数里靠 arguments 处理不定参,箭头函数里它不存在,访问会得 ReferenceError:
立即学习“Java免费学习笔记(深入)”;
function old() { return arguments[0] }
const New = () => arguments[0] // ❌ ReferenceError
const NewFixed = (...args) => args[0] // ✅
- ES6+ 环境下,优先用
...args替代arguments - 需要兼容 IE 或老 Node.js 版本时,别在箭头函数里试图读
arguments
真正容易被忽略的是:箭头函数的简洁性只在单表达式场景下成立;一旦加了花括号和 return,它和普通函数在行为上几乎没区别,却失去了语义提示——这时候不如直接写 function,反而更易读、更可控。











