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ただし、 Ecmascriptの実装とバージョンによって異なるオブジェクトの機能に注意する必要があります。引数変数に完全にリンクされた疑似配列にすることも、独立した配列インスタンスにすることもできます。

環境がわかっている場合は問題ありませんが、コーディングすることをお勧めします

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 に答える
0

arguments「疑似配列」です。配列を返すこととどう違うのでしょうか?唯一の欠点はarguments、配列ではないため、必要な配列のプロパティとメソッドがないことです。

于 2012-05-08T10:41:43.993 に答える