Chrome调试器为何认为封闭的局部变量未定义?
使用此代码: function baz() { var x = "foo"; function bar() { debugger; }; bar(); } baz(); 我得到这个意外的结果: 当我更改代码时: function baz() { var x = "foo"; function bar() { x; debugger; }; bar(); } 我得到了预期的结果: 另外,如果eval内部函数中有任何调用,我可以按自己的意愿访问变量(与传递给的对象无关eval)。 同时,Firefox开发人员工具在两种情况下均具有预期的行为。 Chrome表示调试器的行为不如Firefox方便吗?我已经观察了一段时间,直到并包括41.0.2272.43 beta(64位)。 Chrome的JavaScript引擎是否可以“拉平”功能? 有趣的是,如果我添加内部函数中引用的第二个变量,则该x变量仍未定义。 我了解到,使用交互式调试器时,通常会有范围和变量定义的怪癖,但在我看来,根据语言规范,应该为这些怪癖提供“最佳”解决方案。因此,我很好奇这是否是由于Chrome比Firefox更优化了。以及在开发过程中是否可以轻松禁用这些优化(是否应该在打开开发工具时将其禁用?)。 另外,我可以使用断点和debugger语句来重现此内容。