【问题标题】:TypeError: redeclaration of let error in Firebug console if running ES6 codeTypeError:如果运行 ES6 代码,在 Firebug 控制台中重新声明 let 错误
【发布时间】:2016-07-23 17:38:44
【问题描述】:

我正在学习 ES6,请多多包涵。

以下是运行良好的代码,如果我单击一次 Run 按钮,但在第二次单击时它开始显示TypeError: redeclaration of let myArr 错误。

让我知道这种奇怪的(可能不是)行为。

let myArr = [34,45,67,2,67,1,5,90];
let evenArr = [];
let oddArr = [];
myArr.forEach(x => {
    if (x % 2 === 0) {
        evenArr.push(x);
    } else {
        oddArr.push(x);
    }
});

console.log(evenArr);
console.log(oddArr);

错误 -

【问题讨论】:

    标签: javascript ecmascript-6 ecmascript-harmony


    【解决方案1】:

    ES6 does not allow 你这样做(在同一范围内重新声明一个块范围的变量):

    let foo;
    let foo;
    

    由于控制台会一直保持状态直到您重新加载页面(毕竟您是在页面的上下文中),所以第一次运行它时您定义了myArr,因此您无法在第二次运行时重新定义它。

    【讨论】:

    • 好的,但是为什么如果我将 let 更改为 var 并点击运行仍然显示错误(尽管刷新时它消失了)
    • let 在块内定义了变量。如果您能够通过使用 var 重新定义它来将其提升到函数范围内,那将是非常奇怪的(而且很可能不是有意的)。
    • 我也有同样的问题。我阅读了您的答案并对let 进行了一些研究,但我仍然很难理解它。根据您所说,他通过使用let 定义变量然后将其更改为var 得到了错误。但是,就我而言,我从 var 开始,但即使我没有使用“let”,我仍然会遇到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多