手順:
Firefox 29.0.1 (Windows 7 x64) でページを開く:
<!doctype html> <title>Test</title> <script> (function () { var x = 5, f = function () { setTimeout(f, 1000); }; f(); }()); </script>
開発者ツール ( F12) を開きます。
Debuggerで、以下にブレークポイントを設定します。
setTimeout(f, 1000);
ブレークポイントに到達したら、
x
コンソールで評価します。結果:undefined
ページをリロードします。の最初の実行でブレークポイントにヒットします
f
。評価し
x
ます。結果:5
実行を再開し、再びブレークポイントに到達したときに を評価し
x
ます。同じ結果:5
私の仮定: Firefox が最初の実行時にf
それが必要ないことを認識した場合、それは"with"x
の値を保存しません。したがって、後続の呼び出しでは、 isの値が呼び出されます。興味深いことに、Chrome 35 と IE11 で同じ動作が見られます。x
f
f
x
undefined
質問: 何が起こっているのですか? x
ステップ 4 (上記参照) で正しい値を評価するように Firefox を設定できますか?