別の javascript 関数に引数を渡す

以下のことを試してみましたが、うまくいきませんでした。

function a(args){
    b(arguments);
}

function b(args){
    // arguments are lost?
}

a(1,2,3);

関数aではargumentsキーワードを使って引数の配列にアクセスできますが、関数bではこれらが失われてしまいます。私がやろうとしているように、別のjavascript関数に引数を渡す方法はありますか?

ソリューション

.apply()][1]を使うと、以下のように、関数barguments`にも同じようにアクセスできます。

function a(){
    b.apply(null, arguments);
}
function b(){
   alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);​

[ここでテストできます][2]。

解説 (12)

スプレッド演算子

スプレッド演算子は、複数の引数(関数呼び出しの場合)や複数の要素(配列リテラルの場合)が想定される場所で、式を展開することができます。

ECMAScript ES6 では、より実用的な方法でこれを行うことができる新しい演算子が追加されました。...拡張演算子

apply`メソッドを使わない例。

function a(...args){
  b(...args);
  b(6, ...args, 8) // You can even add more elements
}
function b(){
  console.log(arguments)
}

a(1, 2, 3)

Note このスニペットは、お使いのブラウザがまだES5を使用している場合、シンタックスエラーを返します。

編集部注:このスニペットはconsole.log()を使用しているため、結果を見るためにはブラウザのJSコンソールを開く必要があります** - ページ内での結果はありません

このような結果が表示されます。

.

要するに、スプレッド演算子は、配列を使っている場合には別の目的で使うことができるので、関数の引数にも使うことができます。同様の例が公式ドキュメントで説明されています。一休パラメータ

解説 (5)

他のどの回答も提供していない説明は、元の引数は*まだ利用可能ですが、argumentsオブジェクトの元の位置にはありません。

argumentsオブジェクトは、関数に提供される実際のパラメータごとに1つの要素を含みます。aを呼び出すときには、3つの引数、すなわち、数字の123を与えます。つまり、argumentsには[1, 2, 3]が含まれます。

function a(args){
    console.log(arguments) // [1, 2, 3]
    b(arguments);
}

しかし、b を呼び出すときには、a'の arguments オブジェクトという、正確に 1 つの 引数を渡します。つまり、arguments には [[1, 2, 3]] (つまり、a's arguments オブジェクトという1つの要素があり、a に対するオリジナルの引数を含むプロパティを持っています)が含まれていることになります。

function b(args){
    // arguments are lost?
    console.log(arguments) // [[1, 2, 3]]
}

a(1,2,3);

@Nick さんが実演してくれたように、apply を使って、コールの中で arguments オブジェクトのセットを提供することができます。

以下は同じ結果を得るためのものです。

function a(args){
    b(arguments[0], arguments[1], arguments[2]); // three arguments
}

しかし、一般的なケースでは apply が正しい解となります。

解説 (2)