LoginSignup
1
0

Firefoxのコールスタックに関する謎なふるまい

Last updated at Posted at 2017-11-02

再帰がどのぐらいでコールスタックを使い果たすのか試していたら、Firefoxの謎なふるまいを発見したのでご報告。

function f0(n) {
  try{
    return f0(n+1);
  }catch(e){
    return n;
  }
}
f0(0);
/*
10194
*/

function f1(n) {
  try{
    return Object.assign(f1)(n+1);
  }catch(e){
    return n;
  }
}
f1(0);
/*
25684
*/

Object.assign()でソースオブジェクトを指定していないので、元の関数をそのまま使ってるだけのはずなのに、スタックオーバーフローに強くなってる。
「もしかして余分な処理を挟むことによってウェイトが入ってその分メモリが回収されてる?」と思って、ループを挟むなどしてみたけど、あまり関係がないみたいだった。謎。
 
ちなみに、Chromeでは再現しなかった。

なお、思い出したようにFirefox121で試したところ、再現しなかった。

1
0
0

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
1
0