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

Is it safe to operate with and return dynamic arguments?

本文关键字:参数 是否 安全 动态 返回      更新时间:2023-09-26
/*
 * Example function for operating with dynamic arguments
 */
function something(){
    for(var i in arguments){
        arguments[i] = arguments[i] + Math.random() * 25;
    }
    return arguments;
}
没有

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

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

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

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

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

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

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

是的,它是安全的。但是,您应该注意 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;
}