有没有办法访问闭包内的“arguments”对象?

Is there a way to access the "arguments" object inside of a closure?

提问人:wibbuffey 提问时间:1/29/2022 最后编辑:epascarellowibbuffey 更新时间:1/29/2022 访问量:121

问:

我有一个闭包,我想从闭包内部访问闭包的参数。这可能吗?

function outerFunction (param1, param2) {
  // Returns [param1, param2, [param1, param2]]
  return function innerFunction () { return [param1, param2, arguments] }
}

// [1, 2, [1, 2]]
console.log(outerFunction(1, 2)(3, 4));

JavaScript 节点 .js 函数 闭包

评论

0赞 skara9 1/29/2022
您可以在函数中创建一个范围为变量 - 您拥有的也不是有效的 js
0赞 wibbuffey 1/29/2022
@skara9 我已经纠正了错别字,谢谢!
1赞 skara9 1/29/2022
您拥有的代码有什么问题?只是错别字吗?
0赞 wibbuffey 1/29/2022
@skara9 哦,我的意思是写它返回了 [1, 2, [1, 2]]。对不起,我真的应该多校对一下这个问题......
1赞 skara9 1/29/2022
然后应该修复

答:

1赞 trincot 1/29/2022 #1

arguments是一种特殊的野兽,在草率模式下遵循的规则与在严格模式下的规则不同。它类似于数组,但不是真正的数组。但是没有必要使用它。只需使用 rest 参数语法

function outerFunction (param1, param2) {
  return function innerFunction (...args) { 
    return [param1, param2, args];
  };
}

let result = outerFunction(1, 2)(3, 4);
console.log(result); // [1, 2, [3, 4]]

评论

0赞 wibbuffey 1/29/2022
谢谢!我不知道传播语法可以应用于函数参数。
0赞 Thomas 1/29/2022
@wibbuffey是的,从技术上讲,这不是传播语法,而是 rest 参数
0赞 Keith 1/29/2022
@wibbuffey 另外,如果你愿意,你可以传播参数,.[1,2,3,4]return [param1, param2, ...args]
0赞 wibbuffey 1/30/2022
@Keith是的,我知道你可以为此使用传播语法。那不是我想要的;返回值纯粹是一个示例。