JavaScript: var Name Scope

By Xah Lee. Date: . Last updated: .

Note: var deprecated

Note: The use of var is deprecated since ES2015, due to its name hoisting complexity and name scope complexity [see var Name Scope] , you should never use var. Use let Declaration instead.

function-level scope

Name declared with var has scope to nearest outer function's curly bracket {}.

This variable scoping rule is called function-level scope.

name scope means where the name can be seen. (that is, have meaning.)

// Name declared with var has scope to nearest outer function's curly bracket {}.

function f() {
  var n = 3;
  {
    var n = 4;
  }
  return n;
}

console.log(f()); // prints 4

If a var declaration is not inside function, then its scope is global. [see Global Variable]

Note: the function-level scope applies only for variable declared with var. It does not apply to variable declared with let or const. [see let Declaration]

Using Function to Emulate Block Scope

In pre-JS2015 code, you will often see that a function is used purely for the purpose of containing variable inside as local variables, like this:

(function(){ var x; // local var x // … }());

This will create a function, and immediately evaluate it. Here's a example.

function f() {
  var n = 3;
  (function () {
    var n = 4;
  })();
  return n;
}

console.log(f()); // prints 3

Function Scope as Namespace

JavaScript pre-JS2015 does not have modules or namespace. One hack to achieve namespace is wrapping the entire source code of your package inside a function. Like this:

(function nicePackage() {
  // your source code here
})();

This way, when your package/file is loaded, it only introduces one name into the global space.

JavaScript variable

BUY Ξ£JS JavaScript in Depth