箭头函数不支持apply改变this指向,因其this在定义时已固化为外层词法作用域的this,apply的第一个参数被忽略;虽可传参,但无arguments对象,需用rest参数替代。

箭头函数本身不支持 apply 方法改变其 this 指向,这是根本前提。不是“用法差异”,而是“不可用”——apply 对箭头函数无效。
箭头函数没有自己的 this,所以 apply 无法重绑定
普通函数的 this 是动态的,调用时可通过 apply 显式指定上下文对象;而箭头函数的 this 在定义时就固定为外层作用域的 this,运行时不可更改。
-
apply的第一个参数(thisArg)会被忽略,箭头函数仍沿用词法作用域中的this - 即使强行调用
fnArrow.apply(obj, [...]),obj不会影响函数体内this的值 - 这种行为是语言规范强制规定的,不是兼容性问题,所有现代 JS 引擎都如此
apply 可以传参,但箭头函数不接收 arguments,也不响应 apply 的参数数组
apply 的第二个参数是数组,用于展开传递给目标函数的实参。箭头函数虽能接收这些参数值,但它自身没有 arguments 对象,且不能通过 apply 触发特殊行为(如借用类数组)。
- 参数值能正常传入并使用(例如
(a, b) => a + b可被apply(null, [1, 2])调用,结果为3) - 但函数内部访问不到
arguments,必须用 rest 参数(...args)替代 - 如果原意是借用其他对象的方法(比如数组的
slice),箭头函数无法替代普通函数完成这类操作
实际开发中该注意什么
当需要动态绑定 this 或兼容类数组参数场景时,不能用箭头函数替代普通函数。
立即学习“Java免费学习笔记(深入)”;
- 事件回调若需访问实例属性,别写成箭头函数(否则
this指向错误) - 工具函数如
Math.max.apply(null, arr)不能换成箭头函数写法,应改用扩展运算符:Math.max(...arr) - 想让某个函数可被
apply/call/bind控制this,必须用function声明或方法简写
本质上,这不是“参数处理差异”,而是设计定位不同:箭头函数专注简化语法和固化词法作用域,apply 则服务于动态执行上下文。两者不在同一抽象层级上协作,而是互斥使用场景。


















