Søgeordet let blev introduceret i ES6 (2015)
Variabler defineret med let kan ikke Gendeklareres
Variabler defineret med let skal erklæres før brug
Variabler defineret med lad have Block Scope
Variabler defineret med let kan ikke genangives.
Du kan ikke ved et uheld generklære en variabel erklæret med let.
Med let kan du ikke gøre dette:
let x = "John Doe";
let x = 0;Med var kan du:
var x = "John Doe";
var x = 0;Før ES6 (2015) havde JavaScript Global Scope og Function Scope.
ES6 introducerede to vigtige nye JavaScript-nøgleord: let og const.
Disse to søgeord giver Block Scope i JavaScript.
Variabler erklæret inde i en { } blok kan ikke tilgås fra uden for blokken:
{
let x = 2;
}
// x can NOT be used hereVariabler, der er erklæret med var nøgleordet, kan IKKE have blokomfang.
Variabler erklæret inde i en { } blok kan tilgås fra udenfor blokken.
{
var x = 2;
}
// x CAN be used hereGenangivelse af en variabel ved hjælp af var nøgleordet kan give problemer.
Genangivelse af en variabel inde i en blok vil også generklære variablen uden for blokken:
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2Prøv det selv →
<!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>
Genangivelse af en variabel ved hjælp af let nøgleordet kan løse dette problem.
Generklæring af en variabel inde i en blok vil ikke generklære variablen udenfor blokken:
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10Prøv det selv →
<!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>
| Scope | Redeclare | Reassign | Hoisted | Binds this | |
| var | No | Yes | Yes | Yes | Yes |
| let | Yes | No | Yes | No | No |
| const | Yes | No | No | No | No |
let og const har blokeringsområde.
let og const kan ikke genopgives.
let og const skal deklareres før brug.
let og const binder ikke til dette.
let og const er ikke hejst.
var skal ikke deklareres.
var er hejst.
var binder sig til dette.
Søgeordene let og const er understøttes ikke i Internet Explorer 11 eller tidligere.
Følgende tabel definerer de første browserversioner med fuld understøttelse:
| Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
| Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
Genangivelse af en JavaScript-variabel med var er tilladt hvor som helst i et program:
var x = 2;
// Now x is 2
var x = 3;
// Now x is 3Prøv det selv →
<!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>
Med let er generklæring af en variabel i samme blok IKKE tilladt:
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
}Generklæring af en variabel med let, i en anden blok, ER tilladt:
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}Prøv det selv →
<!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>
Variabler defineret med var er hejst til toppen og kan initialiseres til enhver tid. <p>Betydning: Du kan bruge variablen, før den erklæres:
Det er i orden:
carName = "Volvo";
var carName;Prøv det selv →
<!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>
Hvis du vil lære mere om hejsning, så læs kapitlet JavaScript-hejsning. <p>Variabler defineret med let er også hejst til toppen af blokken, men ikke initialiseret.
Betydning: Brug af en let-variabel, før den erklæres, vil resultere i en ReferenceError:
carName = "Saab";
let carName = "Volvo";Prøv det selv →
<!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>