Junior
Mis vahe on muutuja, let ja const vahel?
sobes.tech AI
Vastus AI-lt
var on funktsiooni ulatuslik nähtavus, let ja const on ploki ulatuslikud. var saab uuesti deklareerida ja ümber määrata, let saab ümber määrata, kuid ei saa uuesti deklareerida samas ulatuses, const ei saa mitte deklareerida ega ümber määrata. Muutujad, mis deklareeritud var-ga, on tõstetud (hoisting) ja algselt määratud undefined-ks, let ja const on tõstetud, kuid jäävad "ajutisse surmapiirkonda" enne initsialiseerimist.
// var on funktsiooni ulatuslik
function exampleVar() {
if (true) {
var x = 10;
console.log(x); // 10
}
console.log(x); // 10 (x on nähtav siin)
}
// let ja const on ploki ulatuslikud
function exampleLetConst() {
if (true) {
let y = 20;
const z = 30;
console.log(y); // 20
console.log(z); // 30
}
// console.log(y); // Kļūda ReferenceError: y nav definēts
// console.log(z); // Kļūda ReferenceError: z nav definēts
}
// var var pārrakstīt un atkārtoti deklarēt
var a = 1;
var a = 2; // Atkārtota deklarācija
a = 3; // Pārrakstīšana
console.log(a); // 3
// let var pārrakstīt, bet nevar atkārtoti deklarēt tajā pašā redzeslokā
let b = 4;
// let b = 5; // Kļūda SyntaxError: Identifier 'b' ir jau deklarēts
b = 6; // Pārrakstīšana
console.log(b); // 6
// const nedrīkst ne pārrakstīt, ne atkārtoti deklarēt
const c = 7;
// const c = 8; // Kļūda SyntaxError: Identifier 'c' ir jau deklarēts
// c = 9; // Kļūda TypeError: Pievienošana konstantes mainīgajam.
console.log(c); // 7 (primitīviem tipiem)
// Pacelšana (hoisting)
console.log(hoistedVar); // undefined (var ir pacelts un inicializēts ar undefined)
var hoistedVar = "Es esmu var";
// console.log(hoistedLet); // Kļūda ReferenceError: Cannot access 'hoistedLet' before initialization
// let hoistedLet = "Es esmu let"; // Atrodas laika miršanas zonā