javascriptvariablesvariable-assignment

Is declaring multiple variables in the same var statement equivalent to chained assignment?


var var1 = 1,
    var2 = 1,
    var3 = 1;

This is equivalent to this:

var var1 = var2 = var3 = 1;

I'm fairly certain this is the order the variables are defined: var3, var2, var1, which would be equivalent to this:

var var3 = 1, var2 = var3, var1 = var2;

Is there any way to confirm this in JavaScript? Using some profiler possibly?


Solution

  • Actually,

    var var1 = 1, var2 = 1, var3 = 1;
    

    is not equivalent to:

    var var1 = var2 = var3 = 1;
    

    The difference is in scoping:

    function good() {
      var var1 = 1, var2 = 1, var3 = 1;
    }
    
    function bad() {
      var var1 = var2 = var3 = 1;
    }
    
    good();
    console.log(window.var2); // undefined
    
    bad();
    console.log(window.var2); // 1. Aggh!

    Actually this shows that assignment are right associative. The bad example is equivalent to:

    var var1 = (window.var2 = (window.var3 = 1));