JavaScript: var Name Scope

By Xah Lee. Date: . Last updated: .

β€œ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 {}.

// 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

This variable scoping rule is called function-level scope.

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]

Before JS2015 Practices

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

βˆ‘ JS in Depth
XAH Β BUY NOW

JS in Depth

JS Obj Ref

DOM


JS in Depth

Basic Syntax

Value Types

Variable

String

Function

Property

Object and Inheritance

Array

Constructor/Class

Iterable 🌟

Misc