代码之家  ›  专栏  ›  技术社区  ›  tjb

顶级var语句和逗号赋值语句:为什么它们不同

  •  0
  • tjb  · 技术社区  · 6 年前

    我在浏览器控制台中执行这两个语句。但是它们有不同的结果/不同的副作用。我想知道具体原因。

    var a = 1,b; #success value of b is undefined
    a = 1,b; #failure
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#Declaring_and_initializing_two_variables

    2 回复  |  直到 6 年前
        1
  •  1
  •   Oleksandr Kovpashko    6 年前

    这是预期的行为。 var a = 1,b; 相当于

    var a = 1;
    var b;
    

    a = 1,b; 相当于

    a = 1;
    b;
    

    b; UPD:前面的语句不正确。 是对未定义变量的引用。

    为什么不用变量声明 var 关键字?它将在严格模式下失败。

        2
  •  4
  •   Bergi    6 年前

    因为逗号在这里有不同的意思。在第一个语句中,它将 multiple variables to be declared (带一个 var 关键字):

    var a = 1,
        b /* = undefined */;
    

    在第二个陈述中,这是一个 comma operator 分隔两个表达式:

    (a = 1), b; /*
     ^       ^ Reference Error
     | declared above */