【问题标题】:The importance of arguments object in JavaScriptJavaScript 中 arguments 对象的重要性
【发布时间】:2019-02-10 07:29:30
【问题描述】:

我对 JavaScript 中的 arguments 对象概念非常陌生,并试图从 this tutorial 中理解这个概念。

文档中的以下示例解释如下。

 function func1(a, b, c) {
      console.log(arguments[0]);
      // expected output: 1

      console.logr(arguments[1]);
      // expected output: 2

     console.log(arguments[2]);
     // expected output: 3
 }

 func1(1, 2, 3);

但是我无法理解这个概念的重要性,我们主要在什么场景中使用这个概念?

请原谅我在手机上打字时出现问题格式问题。

【问题讨论】:

  • 您看过页面的“示例”部分吗?例如,当您的函数接受可变数量的参数时,它很有用。
  • 可能滚动到 examples 会比链接中的第一个 sn-p 更好地显示这个概念
  • 是的,我已经看到了。我们可以通过索引位置读取参数,而不考虑传递给函数的参数,但我从未在我的实时项目中使用过这样的概念,所以只是想了解在哪些情况下使用了这个概念
  • 如果您是新手,您可能会发现这个 youtube 非常有用:[JavaScript 中的参数数组](youtube.com/watch?v=4Sw6OUXjHsk)

标签: javascript arguments javascript-objects


【解决方案1】:

arguments 对象在您可能有可变数量的参数的情况下很有用:

function sumAll() {
  var res = 0;
  for (var i = 0; i < arguments.length; i++) {
    res += arguments[i];
  }
  return res;
}

console.log(sumAll(3)); // 3
console.log(sumAll(3, 4, 5)); // 12

不过,由于 ES6 是 2015 年标准化的 javascript 版本(也称为 ES2015),您可以使用 rest 参数语法来简化此操作:

function sumAll(...args) {
    var res = 0;
    for (var i = 0; i < args.length; i++) {
        res += args[i];
    }
    return res;
}

console.log(sumAll(3)); // 3
console.log(sumAll(3, 4, 5)); // 12

因此不再需要 arguments 对象。

【讨论】:

  • “...不再需要”,除非您需要支持IE
  • 没有“休息运算符”,有rest parameter syntax。 ;-) 我不认为使用休息参数更简单。
  • @axnyff 感谢您用高级示例进行解释 :)
  • @RobG 谢谢,我编辑了。但是,我不明白你为什么说它不简单。拥有一个神奇的对象是令人困惑的。事实参数不是数组通常会导致转换混乱。
  • @Axnyff——我是在解释参数对象的上下文中发言的。我猜在期望任意数量的参数的情况下,其余参数是一个很好的选择,但是接受值数组或选项对象似乎更常见。
【解决方案2】:
function summIt(){
    let result = 0;
    let args = [...arguments];
    
    args.forEach(el => result += el);
      
    return result;
}
    
console.log(summIt(4,7,4,8,9,3,3)); //38

const summ = (...args) => {
    let result = 0;
    
    Array.from(args).forEach(el => result += el);
      
    return result;
}
    
console.log(summ(4,7,4,8,9,3,3)); //38

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2012-11-11
    • 2015-02-26
    相关资源
    最近更新 更多