Junior
Care sunt modalitățile de a declara variabile în JavaScript? Menționați diferențele dintre aceste metode.
sobes.tech AI
Răspuns de la AI
În JavaScript, variabilele pot fi declarate în trei moduri: var, let, const.
Diferențele dintre ele:
| Diferență | var |
let |
const |
|---|---|---|---|
| Domeniu | Funcțional | Bloc | Bloc |
| Redefinire | Posibil | Posibil | Imposibil |
| Reatributare | Posibil | Posibil | Imposibil |
| Hoisting | Ridică declarația și inițializarea la undefined |
Ridică declarația, dar nu inițializarea | Ridică declarația, dar nu inițializarea |
Exemple:
// var
function exempluVar() {
var x = 10; // Domeniu funcțional
if (true) {
var x = 20; // Redefinire posibilă în aceeași funcție
console.log(x); // 20
}
console.log(x); // 20 (variabila x din if este accesibilă aici)
}
console.log(x); // Eroare: ReferenceError: x nu este definit (x nu este vizibil în afara funcției)
// Hoisting cu var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exempluLet() {
let y = 10; // Domeniu de bloc
if (true) {
let y = 20; // Redefinire nu posibilă în același bloc
console.log(y); // 20 (alt y)
}
console.log(y); // 10 (variabila y în afara blocului)
}
console.log(y); // Eroare: ReferenceError: y nu este definit
// Hoisting cu let
// console.log(b); // Eroare: ReferenceError: Nu se poate accesa 'b' înainte de inițializare
let b = 5;
console.log(b); // 5
// const
function exempluConst() {
const z = 10; // Domeniu de bloc
// z = 20; // Eroare: TypeError: Atribuire la variabilă constantă. (Reatributare imposibilă)
if (true) {
const z = 20; // Redefinire nu posibilă în același bloc
console.log(z); // 20 (alt z)
}
console.log(z); // 10 (variabila z în afara blocului)
}
console.log(z); // Eroare: ReferenceError: z nu este definit
// Hoisting cu const
// console.log(c); // Eroare: ReferenceError: Nu se poate accesa 'c' înainte de inițializare
const c = 5;
console.log(c); // 5
// Pentru obiecte și array-uri declarate cu const, conținutul poate fi modificat
const obj = { nume: 'Test' };
obj.nume = 'Test Nou'; // Permis
// obj = { nume: 'Alt Test' }; // Eroare