为什么我不能在Chrome中声明与函数体同名的let变量

时间:2018-07-31 19:16:59

标签: javascript

Chrome 67(撰写本文时为最新版本)允许我这样做

function foo(x, y) {
    var x = 5;
    console.log(x, y);
}
foo(1,2);
// prints 5 2

但不是这个

function foo(x, y) {
    let x = 5;
    console.log(x, y);
}
foo(1,2);
// Throws a SyntaxError: Identifier 'x' has already been declared

此行为是标准定义的吗?

1 个答案:

答案 0 :(得分:2)

使用旧的var关键字,您可以多次声明一个变量而不会出现问题(嗯……这本身就是一个问题)。

constlet关键字的行为更好。在您的情况下:您不需要重新声明x,因为它已经被声明为foo函数的参数,因此您可以直接为其赋值(覆盖参数不是很干净) ,但合法)。