在Firebug控制台中运行ES6代码时,出现“TypeError: redeclaration of let error”。

15

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

以下是一段代码,如果我点击“运行”按钮一次,它会正常运行,但第二次点击时就会显示“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);

错误 -

let语句的重新声明错误

1个回答

19

ES6 不允许在同一作用域内重新声明块级作用域变量:

let foo;
let foo;

既然控制台会保留状态直到你重新加载页面(毕竟你在页面的上下文中),那么第一次运行时,您定义了myArr,因此您无法在第二次运行时重新定义它。


好的,但是为什么如果我将let更改为var并运行,它仍然显示错误(尽管刷新后它会消失)? - Nesh
let 在块级作用域内定义变量。如果您使用 var 重新定义它并将其提升到函数作用域中,那么这将非常奇怪(并且很可能不是您想要的)。 - ThiefMaster
2
我有同样的问题。我看了你的答案并对let进行了一些研究,但我仍然很难理解它。根据你的说法,他通过使用let定义变量,然后将其更改为var而出现错误。然而,在我的情况下,我从一开始就使用var,但即使我没有使用'let',我仍然会遇到相同的错误。 - chavab_1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接