0

私はTAですが、学生が、次のコードが配列の最初の2つの要素をスワップせず、代わりに未定義として生成された理由を尋ねてきました。学生が私に見せたコードは次のとおりです。

var swapFirstTwoElementsOf = function (a) {
    a = [a[1],a[0]].concat(a.slice(2, a.length));
}

なぜこれは未定義を返すのですか?

4

1 に答える 1

4

変数を返す必要があります。ローカル参照は再割り当てされますが、元の変数aは再割り当てされません。あなたは次のようなことをする必要があります

var swapFirstTwoElementsOf = function (a) {
    return [a[1],a[0]].concat(a.slice(2, a.length));
}

var myArray = [0, 1, 2, 3];
myArray = swapFirstTwoELementsOf(myArray);

以前は、関数は何も返さなかったため、undefinedと評価されていました。

于 2012-11-15T01:01:32.177 に答える