使用并返回动态参数是否安全?

时间:2012-05-08 10:38:58

标签: javascript function arguments

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

    return arguments;
}

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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;
}