Completion requirements
Examples
Declaring and initializing two variables
var a = 0, b = 0;
Assigning two variables with single string value
var a = 'A'; var b = a;
This is equivalent to:
var a, b = a = 'A';
Be mindful of the order:
var x = y, y = 'A'; console.log(x + y); // undefinedA
Here, x
and y
are declared before any code is executed, but
the assignments occur later. At the time x = y
is evaluated,
y
exists so no ReferenceError
is thrown and its value is
undefined
. So, x
is assigned the undefined value. Then,
y
is assigned the value 'A'
. Consequently, after the first
line, x === undefined && y === 'A'
, hence the result.
Initialization of several variables
var x = 0; function f() { var x = y = 1; // Declares x locally; declares y globally. } f(); console.log(x, y); // 0 1 // In non-strict mode: // x is the global one as expected; // y is leaked outside of the function, though!
The same example as above but with a strict mode:
'use strict'; var x = 0; function f() { var x = y = 1; // Throws a ReferenceError in strict mode. } f(); console.log(x, y);
Implicit globals and outer function scope
Variables that appear to be implicit globals may be references to variables in an outer function scope:
var x = 0; // Declares x within file scope, then assigns it a value of 0. console.log(typeof z); // "undefined", since z doesn't exist yet function a() { var y = 2; // Declares y within scope of function a, then assigns it a value of 2. console.log(x, y); // 0 2 function b() { x = 3; // Assigns 3 to existing file scoped x. y = 4; // Assigns 4 to existing outer y. z = 5; // Creates a new global variable z, and assigns it a value of 5. // (Throws a ReferenceError in strict mode.) } b(); // Creates z as a global variable. console.log(x, y, z); // 3 4 5 } a(); // Also calls b. console.log(x, z); // 3 5 console.log(typeof y); // "undefined", as y is local to function a