【问题标题】:Why can I declare a javascript var multiple times? [duplicate]为什么我可以多次声明一个 javascript var? [复制]
【发布时间】:2019-07-12 15:23:28
【问题描述】:

为什么我可以多次声明一个变量?我预计会出错。

此代码引发错误:

let a = true;
let a = false;

未捕获的语法错误:标识符“a”已被声明

为什么这也不会引发错误?

var b = true;
var b = false;

预期:未捕获的 SyntaxError:标识符“b”已被声明

【问题讨论】:

标签: javascript function ecmascript-6 var


【解决方案1】:

这是因为var 存在变量提升,但let(或const 对此没有)。

这意味着每次您使用var 时,它都会取消之前的操作,因为对于 JavaScript 解释器,您的第一个代码如下所示:

var b;
b = true;
b = false;

但这不适用于letconst,因为letconst 是块作用域,而var 是函数作用域。

【讨论】:

    【解决方案2】:

    var 被提升;重复的变量名被忽略。对于解释器,您的第二个 sn-p 看起来像:

    var b;
    b = true;
    b = false;
    

    相比之下,let没有被提升,因此禁止重复声明。

    【讨论】:

    猜你喜欢
    • 2016-04-26
    • 2015-05-02
    • 1970-01-01
    • 2015-12-23
    • 2020-05-16
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多