0
/*
 * Example function for operating with dynamic arguments
 */
function something(){
    for(var i in arguments){
        arguments[i] = arguments[i] + Math.random() * 25;
    }

    return arguments;
}

没有错误,没有注意到性能下降,并且值已更改。

那么,对动态参数进行此类操作是否安全?

4

3 回答 3

3

我永远不会返回它,因为它不是一个真正的数组(有关该对象特殊行为的一些信息,请参见http://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/ ) -所以根据调用代码对它的作用,它会失败。

但是,您可以轻松地将其转换为数组:

var args = Array.prototype.slice.call(arguments);

我不会修改原始对象,因为如果您的函数接受任何更改,也会更改相应的命名参数。

于 2012-05-08T10:41:20.843 回答
0

arguments是一个“伪数组”。与返回数组有何不同?唯一的缺点是它arguments不是数组,因此您没有所需的数组属性和方法。

于 2012-05-08T10:41:43.993 回答
0

是的,它是安全的。但是,您应该注意arguments对象的功能,这在 Ecmascript 实现和版本之间有所不同。它可以是一个与参数变量绝对链接的伪数组,也可以是一个独立的 Array 实例。

如果您知道您的环境就可以,否则最好编写代码

function something() {
    var l = arguments.length,
        res = new Array(l);
    for(var i=0; i<l; i++) {
        res[i] = arguments[i] + Math.random() * 25;
    }
    return res;
}
于 2012-05-08T10:46:17.830 回答