箭头函数无自身arguments却可访问参数,原理是什么?
箭头函数无自身arguments却能访问参数的原因
你的推测完全正确——箭头函数确实没有自身的arguments对象,它访问到的arguments就是外层(父级)非箭头函数的arguments对象。
这是箭头函数的核心设计特性之一:它不会创建自己的this、arguments、super或new.target绑定,这些变量都会从最近的非箭头函数外层作用域中继承而来。
用代码示例可以直观验证:
function outer(a, b) { const arrow = () => { console.log(arguments); // 输出 outer 函数的 arguments: [1, 2] }; arrow(); } outer(1, 2);
如果箭头函数外层没有非箭头函数(比如直接定义在全局作用域),访问arguments会报错(严格模式下),因为此时找不到可继承的外层arguments,而全局作用域在严格模式中不存在arguments对象:
'use strict'; const globalArrow = () => { console.log(arguments); // 抛出 ReferenceError: arguments is not defined }; globalArrow();
另外提一句:ES6开始更推荐用**剩余参数(...args)**替代arguments,它对普通函数和箭头函数都适用,语义也更清晰:
function outer(a, b) { const arrow = (...args) => { console.log(args); // 这里的 args 是箭头函数自身的参数数组:[3, 4] }; arrow(3, 4); } outer(1, 2);
内容的提问来源于stack exchange,提问作者olabie
相关产品推荐
相关产品推荐

