可変長引数の個数には気をつけろ
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
オプションでスタックサイズを増やすことができますので、よければ試してみるとよいでしょう。
以上です。よろしくお願いします。