首页 > 解决方案 > 为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

问题描述

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

这种行为是标准定义的吗?

标签: javascript

解决方案


使用 oldvar关键字,您可以自由地多次声明变量而不会出现问题(嗯......这本身就是一个问题)。

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


推荐阅读