JavaScript:为啥我们在函数中使用 **arguments** 对象? [复制]

Posted

技术标签:

【中文标题】JavaScript:为啥我们在函数中使用 **arguments** 对象? [复制]【英文标题】:JavaScript: Why do we use **arguments** object in a function? [duplicate]JavaScript:为什么我们在函数中使用 **arguments** 对象? [复制] 【发布时间】:2015-03-19 13:52:32 【问题描述】:

我注意到在某些函数中使用了 arguments 对象:

function fn(arg1, arg2)

    console.log(arguments[0])


fn(1, 2); // 1

为什么有用?

【问题讨论】:

我们可以将它用于未知参数所以... arguments 对象有点特殊,但它最常用于可变数量的参数。还有一些有用的属性,例如 callercallee。更多信息:developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案1】:

在您的示例中,它没有用,也不是一个好主意。当您想要一个可以接受不定数量参数的函数时,它会很有用:

function sum() 
    var total = 0;
    for (var i = 0; i < arguments.length; i += 1) 
        total += arguments[i];
    
    return total;


console.log(sum(5, 6, 7, 8));   // 26

请注意,ES6 允许使用rest parameters,这在现在使用arguments 的大多数情况下会更有用:

function sum(...values) 
    return values.reduce(function (prev, cur) 
        return prev + cur;
    , 0);

【讨论】:

以上是关于JavaScript:为啥我们在函数中使用 **arguments** 对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用javascript函数包装器(在coffeescript中添加)“.call(this)”

为啥我们不应该在 javascript 中使用 ++? [复制]

为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]

JavaScript keys() 函数为啥没有文档

为啥使用命名函数表达式?

为啥我们在 Javascript 中使用术语阴影而不是覆盖?