【问题标题】:Is there a way to access the "arguments" object inside of a closure?有没有办法访问闭包内的“参数”对象?
【发布时间】:2022-01-29 03:09:11
【问题描述】:

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

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));

【问题讨论】:

  • 你可以在函数中创建一个范围内的变量——你所拥有的也不是有效的 js
  • @skara9 我已更正错字,谢谢!
  • 您的代码有什么问题?只是错字吗?
  • @skara9 哦,我的意思是写它返回 [1, 2, [1, 2]]。抱歉,我真的应该多校对一下这个问题......
  • 应该修复

标签: javascript node.js function closures


【解决方案1】:

arguments 是一种特殊的野兽,在马虎模式和严格模式下遵循不同的规则。它类似于数组,但不是真正的数组。但没有必要使用它。只需使用rest parameter syntax

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]]

【讨论】:

  • 谢谢!我不知道传播语法可以应用于函数参数。
  • @wibbuffey 是的,从技术上讲,这不是传播语法,而是rest parameter
  • @wibbuffey 另外,如果你想要[1,2,3,4],你可以传播args,return [param1, param2, ...args]
  • @Keith 是的,我知道您可以为此使用扩展语法。那不是我想要的。返回值只是一个例子。
猜你喜欢
  • 2016-03-31
  • 2018-11-08
  • 2021-10-11
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2021-02-04
相关资源
最近更新 更多