在 Firefox Scratchpad 中使用 let 时的范围问题

Krz*_*nek 5 javascript firefox ecmascript-6

以下代码在 Firefox 52 Scratchpad 中运行时产生错误:

function scope() {
    let x = 1;
}

let x = 2;

/*
Exception: SyntaxError: redeclaration of let x
@Scratchpad/8:1:1
*/
Run Code Online (Sandbox Code Playgroud)

怎么解释?第一个x应该封装在函数中,不要干扰第二个声明。

在 Chrome 中将此代码作为片段运行,或<script>在 Firefox 中带有标记的 HTML 页面内运行不会触发异常。将它包装在一个函数中,甚至是一对{}括号中都可以解决这个问题。

可能是 Scratchpad 中的错误吗?

小智 3

只要运行一次就可以了。当你第二次尝试相同的代码时,原来的代码let x = 2;仍然存在。

  • 是的,我在发布问题之前看到了这一点,但我认为这是一种不同的情况,是由“x”首次出现在函数中引起的。我真正需要的是调用 _Reload 和 Run_ 而不仅仅是 _Run_ 来重置上下文。 (2认同)