Маъзулот, let ва const байни фарқият чист?
sobes.tech AI
Ҷавоб аз AI
var дорои функсионалӣ масоҳат аст, дар ҳоле ки let ва const дорои масоҳати блокӣ мебошанд. var метавонад дубора эълон ва таъин карда шавад, let метавонад таъин карда шавад, аммо на дубора эълон, дар ҳоле ки const на метавонад на дубора эълон ва на таъин карда шавад. Променливҳое, ки бо var эълон шудаанд, ба баланд бардоштани (hoisting) бо инициализатсия ба undefined тобеъанд, дар ҳоле ки let ва const низ ба баланд бардоштани тобеъанд, аммо дар "зонаи маргии вақт" боқӣ мемонанд то инициализатсия.
// `var` дорои масоҳати функсионалӣ
function exampleVar() {
if (true) {
var x = 10;
console.log(x); // 10
}
console.log(x); // 10 (ин ҷо x дида мешавад)
}
// `let` ва `const` дорои масоҳати блокӣ
function exampleLetConst() {
if (true) {
let y = 20;
const z = 30;
console.log(y); // 20
console.log(z); // 30
}
// console.log(y); // Хатогӣ ReferenceError: y муайян нашудааст
// console.log(z); // Хатогӣ ReferenceError: z муайян нашудааст
}
// `var` метавонад дубора эълон ва таъин карда шавад
var a = 1;
var a = 2; // Дубора эълон
a = 3; // Дубора таъин
console.log(a); // 3
// `let` метавонад таъин карда шавад, аммо на дубора эълон дар ҳамон масоҳат
let b = 4;
// let b = 5; // Гурӯҳ: SyntaxError: Идентификатори 'b' аллакай эълон шудааст
b = 6; // Таъин
console.log(b); // 6
// `const` наметавонад таъин ва на дубора эълон шавад
const c = 7;
// const c = 8; // Гурӯҳ: SyntaxError: Идентификатори 'c' аллакай эълон шудааст
// c = 9; // Гурӯҳ: TypeError: Таъин ба тағйирёбандаи доимӣ
console.log(c); // 7 (барои намудҳои primitives)
// баланд бардоштани (hoisting)
console.log(hoistedVar); // undefined (var баланд бардошт ва бо `undefined` инициализатсия шудааст)
var hoistedVar = "Ман `var`";
// console.log(hoistedLet); // Гурӯҳ: ReferenceError: Нест метавонад дастрасӣ пайдо кунад 'hoistedLet' пеш аз инициализация
// let hoistedLet = "Ман `let`"; // Дар минтақаи маргии вақт аст
Тафовутҳои асосӣ дар ҷадвал ҷамъбаст шудаанд:
| Хусусият | var |
let |
const |
|---|---|---|---|
| Масоҳат | Функсионалӣ | Блокӣ | Блокӣ |
| Дубора эълон кардан | Бале | Не (дар ҳамон масоҳат) | Не |
| Таъин кардан | Бале | Бале | Не (барои намудҳои primitives) |
| Баланд бардоштани | Бале (бо undefined) |
Бале (дар минтақаи марг) | Бале (дар минтақаи марг) |
| Инициализация оғозӣ | Нужо нест, инициализация | Нужо нест, инициализация | Нужо аст, инициализация |
Мухтасар, барои объектҳо ва массивҳо, ки бо const эълон шудаанд, тағйирёбанда наметавонад ба объекти дигар ё массиви дигар таъин шавад, аммо мундариҷаи объект ё массив метавонад тағйир дода шавад.
const myObject = { key: 'value' };
// myObject = { newKey: 'newValue' }; // Гурӯҳ: TypeError: Таъин ба тағйирёбандаи доимӣ
myObject.key = 'newValue'; // Мумкин аст
console.log(myObject); // { key: 'newValue' }
const myArray = [1, 2];
// myArray = [3, 4]; // Гурӯҳ: TypeError: Таъин ба тағйирёбандаи доимӣ
myArray.push(3); // Мумкин аст
console.log(myArray); // [ 1, 2, 3 ]