0

私はこのコードについて疑問に思っていました:

var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
alert(numbers);

ここから、結果は次の[0, 1, 2, -3, -4, -5, -6, 7, 8, 9] ようになり、誰かがこれについて私に説明できますか?

4

3 に答える 3

1

function .apply(context、argsArray)は、指定されたコンテキストで関数を呼び出し、関数の引数としてargsArrayを渡します。

この場合、関数[].spliceであり、次のパラメーターをこの順序で受け取ります。

  1. index-配列の変更を開始する場所
  2. howMany-インデックスから開始して削除する要素
  3. element1、...、elementN-インデックスで配列に挿入する要素

[3,4].concat(_ref = [-3, -4, -5, -6])2つの配列を連結して配列に評価し、を与え[3, 4, -3, -4, -5, -6]ます。これはに渡されるargsArray.apply()であるため、次のようになります。

  1. インデックス==3(インデックス3から開始)
  2. howMany == 4(4つの要素を削除)
  3. element1、...、elementN == -3、-4、-5、-6(削除後にインデックス3に挿入する要素)

したがって.apply().splice()関数は配列のコンテキストで実行され、numbersインデックス3、4、5、および6の要素が削除され、要素-3、-4、-5、および-6が「2」と「7」の間に挿入されます。元の配列で。

編集:(その部分の説明ではなく)元のコードが何に相当するかの要約については、RobGの回答を参照してください。

于 2011-11-22T12:07:13.330 に答える
1

コードは次の変数宣言に解決されます。

var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var _ref = [-3, -4, -5, -6];

そしてこれらの表現:

numbers.splice(3, 4, -3, -4, -5, -6);
_ref;
alert(numbers);
于 2011-11-22T12:13:44.357 に答える
0

[3, 4].concat(_ref = [-3, -4, -5, -6])インデックス3から[3, 4, -3, -4, -5, -6]の4つの要素が削除され、要素「-3、-4、-5、-6」がインデックス3に挿入されるように評価します。スプライスを参照してください。[].splice.apply(numbers, [3, 4, -3, -4, -5, -6]))numbers.splice(3, 4, -3, -4, -5, -6)

于 2011-11-22T12:02:06.427 に答える