JS Tutorial
JS Version
JS Objects
JS Function
JS Classes
JS Async
JS HTML DOM
JS Browser BOM
JS Web API
JS AJAX
JS JSON
JS vs JQUERY
JS Graphics
JavaScript let
Cannot be Redeclared
Variables defined with let cannot be redeclared and accidentally redeclare a variable.
With let you can not do this:
Example
let x = “John Doe”;
let x = 0;
// SyntaxError: ‘x’ has already been declared
With var you can:
Example
var x = “John Doe”;
var x = 0;
Block Scope
Before ES6 (2015), JavaScript only consisted of Global Scope and Function Scope.
ES6 introduced two new JavaScript keywords: let and const.
These two keywords supported Block Scope in JavaScript.
Variables declared within a { } block cannot be accessed from outside the block:
Example
Variables declared using the var keyword can NOT have block scope.
Variables declared within a { } block can be accessed from outside the block.
Example
{
var x = 2;
}
// x CAN be used here
Redeclaring Variables
Redeclaring a variable with the var keyword can impose problems.
Redeclaring a variable within a block will also redeclare the variable outside the block:
Example
<!DOCTYPE html>
<html>
<body>
<h2>Redeclaring a Variable Using var</h2>
<p id=”demo”></p>
<script>
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
document.getElementById(“demo”).innerHTML = x;
</script>
</body>
</html>
Output
Redeclaring a Variable Using var
Redeclaring a variable with the let keyword can be used to solve this problem.
Redeclaring a variable within a block will not redeclare the variable outside the block:
Example
<!DOCTYPE html>
<html>
<body>
<h2>Redeclaring a Variable Using let</h2>
<p id=”demo”></p>
<script>
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10
document.getElementById(“demo”).innerHTML = x;
</script>
</body>
</html>
Output
Redeclaring a Variable Using let
10
Redeclaring
Redeclaring a JavaScript variable using var is allowed anywhere in a program:
Example
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript let</h2>
<p>Redeclaring a JavaScript variable with <b>var</b> is allowed anywhere in a program:</p>
<p id=”demo”></p>
<script>
var x = 2;
// Now x is 2
var x = 3;
// Now x is 3
document.getElementById(“demo”).innerHTML = x;
</script>
</body>
</html>
Output
JavaScript let
Redeclaring a JavaScript variable with var is allowed anywhere in a program:
3
With let, redeclaring a variable in the same block is NOT permitted:
Example
var x = 2; // Allowed
let x = 3; // Not allowed
{
let x = 2; // Allowed
let x = 3 // Not allowed
}
{
let x = 2; // Allowed
var x = 3 // Not allowed
}
Redeclaring a variable with let, in another block, IS allowed:
Example
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript let</h2>
<p>Redeclaring a variable with <b>let</b>, in another scope, or in another block, is allowed:</p>
<p id=”demo”></p>
<script>
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}
document.getElementById(“demo”).innerHTML = x;
</script>
</body>
</html>
Output
JavaScript let
Redeclaring a variable with let, in another scope, or in another block, is allowed:
2
Let Hoisting
Variables defined with var are hoisted to the top and can be initialized at any time.
Using the variable before it is declared:
Example
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Hoisting</h2>
<p>With <b>var</b>, you can use a variable before it is declared:</p>
<p id=”demo”></p>
<script>
carName = “Volvo”;
document.getElementById(“demo”).innerHTML = carName;
var carName;
</script>
</body>
</html>
Output
JavaScript Hoisting
With var, you can use a variable before it is declared:
Volvo
Variables specified with let are also hoisted to the top of the block, but not initialized.
Using a let variable before it is defined result in a ReferenceError:
Example
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Hoisting</h2>
<p>With <b>let</b>, you cannot use a variable before it is declared.</p>
<p id=”demo”></p>
<script>
try {
carName = “Saab”;
let carName = “Volvo”;
}
catch(err) {
document.getElementById(“demo”).innerHTML = err;
}
</script>
</body>
</html>
Output
JavaScript Hoisting
With let, you cannot use a variable before it is declared.