Chromeデバッガーが閉じたローカル変数が未定義であると考えるのはなぜですか?
このコードで: function baz() { var x = "foo"; function bar() { debugger; }; bar(); } baz(); 私はこの予期しない結果を得ます: コードを変更すると: function baz() { var x = "foo"; function bar() { x; debugger; }; bar(); } 私は期待される結果を得ます: また、eval内部関数内で呼び出しがある場合は、必要に応じて変数にアクセスできます(何に渡すかは関係ありませんeval)。 一方、Firefox開発ツールは、両方の状況で予想される動作を提供します。 デバッガーがFirefoxよりも便利に動作しないのは、Chromeでどうなっていますか。私はこの動作をしばらくの間、バージョン41.0.2272.43ベータ(64ビット)まで観察しました。 ChromeのJavaScriptエンジンは、可能な場合に関数を「フラット化」するのでしょうか。 私は第二の可変追加すると面白いされ、内側の関数で参照し、x変数はまだ定義されていません。 対話型デバッガーを使用する場合、スコープと変数の定義に癖があることがよくありますが、言語仕様に基づいて、これらの癖に対する「最善の」解決策があるはずだと私は思います。だから私はこれがFirefoxよりもさらに最適化されているChromeによるものかどうか非常に興味があります。また、これらの最適化は開発中に簡単に無効にできるかどうか(開発ツールが開いているときに無効にする必要があるかもしれませんか?) また、ブレークポイントとdebuggerステートメントでこれを再現できます。