LoginSignup
2
1

More than 3 years have passed since last update.

JavaScriptの可変長引数の個数

Posted at

可変長引数の個数には気をつけろ

JavaScriptの可変長引数の個数には限界があり、うっかりハマる可能性があるということです。

例として、ある配列に別の配列を足したい時、pushを使うとしましょう。
新しい配列を生成すればよいのではないかとお思いでしょうが、例ですので、まあ聞いてください。

const array = ["foo", "bar"];
array.push(...createSomeArray());
console.log(array.length);

スプレッド構文を使えば、ループも書かなくてよく、便利です。
が、createSomeArrayが50万の長さを持つ配列を返した場合、どうなるでしょうか。

# Node.jsで実行した結果
array.push(...createSomeArray());
      ^
RangeError: Maximum call stack size exceeded

エラーになります。

Cなどは関数を呼び出すとき、引数をスタックに積んでから関数呼び出しを行います。
JavaScriptでも内部で同様のことをしているのだと推察できます。

詳しい方、実際のところを教えてください。

ちなみに

なお、Node.js v10.15.2で試したところ、createSomeArray()は125328個の配列まで返すことができました。
また、--stack-sizeオプションでスタックサイズを増やすことができますので、よければ試してみるとよいでしょう。

以上です。よろしくお願いします。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1