A variable is an assigned to an identifier, so you can reference and use it later in your program.
A variable must be declared before you can use it. There are 3 ways to do this, you can
const, and those 3 ways differ in how you can interact with the variable later on.
var was the only construct available for defining variables.
var a = 0;
If you forget to add
var you will be assigning a value to an undeclared variable, and the results might vary. In modern environments, with strict mode
enabled, you will get an error. In older environments (or with strict mode disabled) this will initialize the variable and assign it to the global object. If you don’t initialize the variable when you declare it, it will have the
undefined value until you assign a value to it.
var a; console.log(a); // expect output: undefined
You can redeclare the variable many times, overriding it:
var a = 1; var a = 2;
You can also declare multiple variables at once in the same statement:
var a = 1, b = 2;
The scope is the portion of code where the variable is visible.
A variable initialized with
var outside of any function is assigned to the global object, has a global scope and is visible everywhere.
A variable initialized with
var inside a function is assigned to that function, it’s local and is visible only inside it, just like a function parameter.
Any variable defined in a function with the same name as a global variable takes precedence over the global variable, shadowing it.
It’s important to understand that a block (identified by a pair of curly braces
}) does not define a new scope. A new scope is only created when a function is created, because
var does not have block scope, but function scope.
let is a new feature introduced in ES2015 and it’s essentially a block scoped (identified by a pair of curly braces
}) version of
var. Its scope is limited to the block, statement or expression where it’s defined, and all the contained inner blocks.
letand completely discard the use of
let seems an obscure term, just read
let color = 'red' as let the color be red and it all makes much more sense. Defining
let outside of any function - contrary to
var - does not create a global variable.
Variables declared with
let can be changed later on in your program, and could be reassigned. Once a
const is initialized, its value can never be changed again, and it can’t be reassigned to a different value.
const a = 'test';
We can’t assign a different literal to the
a const. We can however mutate
a if it’s an object that provides methods that mutate its contents.
const does not provide immutability, just makes sure that the reference can’t be changed.
const has block scope, same as
const for variables that don’t need to be reassigned later in the program, be should always use the simplest construct available to avoid making errors down the road.