skip to main content

Declaring variables in JavaScript

03 January, 2021

Posted in javascript

Since the introduction of ES6, we now have three ways of declaring variables in JavaScript — var, let and const.

var

The var declaration has been part of the language since the beginning. It creates a mutable variable which could have unwanted side effects.

var myNumber = 10;
console.log(myNumber); // 10

myNumber = 20;
console.log(myNumber); // 20

The scope of var is always global unless it is declared within a function.

A function-scoped variable is only available within the body of the function. A block-scoped variable is available in the global scope because of hoisting.

var myNumber = 10; // Global variable

function secretVar() {
var secretNumber = 100; // Function scoped variable
}

if (myNumber > 5) {
var foo = "I'm block scoped"; // Block scoped variable
}

console.log(myNumber); // 10
console.log(secretNumber); // ReferenceError: secretNumber is not defined
console.log(foo); // I'm block scoped

let

The let declaration is similar to var and is the preferred way of declaring mutable variables in ES6.

Unlike var, the let declaration is also block-scoped, meaning it is not available in the global scope when declared within a block.

If we update our earlier example to use let we can see that the foo variable is now not defined on the gloabl scope.

let myNumber = 10; // Global variable

function secretVar() {
let secretNumber = 100; // Function scoped variable
}

if (myNumber > 5) {
let foo = "I'm block scoped"; // Block scoped variable
}

console.log(myNumber); // 10
console.log(secretNumber); // ReferenceError: secretNumber is not defined
console.log(foo); // ReferenceError: foo is not defined

const

The const declaration, as the name implies, is used to define a constant variable; or an immutable variable which cannot be redeclared. Like let, the const declaration is also block-scoped.

const hero = 'Iron Man';
hero = 'Captain America'; //error : Assignment to constant variable.

Which should you use?

Personally I would try and declare all variables with const which is the least likely option to run into problems. If a variable absolutely needs to be mutable, I would then use let which has more robust scoping than var.