Junior
როგორ შეიძლება გამოაცხადოთ ცვლადები JavaScript-ში? დაასახელეთ ამ მეთოდებს შორის განსხვავებები.
sobes.tech AI
პასუხი AI-სგან
JavaScript-ში ცვლილებადი ცვლადების გამოცხადება შესაძლებელია სამ გზით: var, let, const.
სხვაობები მათ შორის:
| განსხვავება | var |
let |
const |
|---|---|---|---|
| ხილვადობის ზონა | ფუნქციური | ბლოკური | ბლოკური |
| გადაფარვა | შესაძლებელია | შესაძლებელია | შეუძლებელია |
| Hoisting | აწევა განცხადებას და ინიციალიზაციას undefined-ზე |
აწევა განცხადებას, მაგრამ არა ინიციალიზაციას | აწევა განცხადებას, მაგრამ არა ინიციალიზაციას |
მაგალითები:
// var
function exampleVar() {
var x = 10; // ფუნქციური ზონა
if (true) {
var x = 20; // შესაძლებელია გადაფარვა იგივე ფუნქციაში
console.log(x); // 20
}
console.log(x); // 20 (ცვლადი x from if ხელმისაწვდომია აქ)
}
console.log(x); // შეცდომა: ReferenceError: x არ არის განსაზღვრული (x ფუნქციას გარეთ არ ჩანს)
// Hoisting var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exampleLet() {
let y = 10; // ბლოკური ზონა
if (true) {
let y = 20; // შეუძლებელია გადაფარვა იგივე ბლოკში
console.log(y); // 20 (სხვა ცვლადი y)
}
console.log(y); // 10 (ცვლადი y ბლოკის გარეთ)
}
console.log(y); // შეცდომა: ReferenceError: y არ არის განსაზღვრული
// Hoisting let
// console.log(b); // შეცდომა: ReferenceError: შეუძლებელია მივუდგეთ 'b'-ს წინასწარ ინიციალიზაციის გარეშე
let b = 5;
console.log(b); // 5
// const
function exampleConst() {
const z = 10; // ბლოკური ზონა
// z = 20; // შეცდომა: TypeError: კონსტანტული ცვლადის გადაცემაა. (გადაწერა შეუძლებელია)
if (true) {
const z = 20; // შეუძლებელია გადაფარვა იგივე ბლოკში
console.log(z); // 20 (სხვა ცვლადი z)
}
console.log(z); // 10 (ცვლადი z ბლოკის გარეთ)
}
console.log(z); // შეცდომა: ReferenceError: z არ არის განსაზღვრული
// Hoisting const
// console.log(c); // შეცდომა: ReferenceError: შეუძლებელია მივუდგეთ 'c'-ს წინასწარ ინიციალიზაციის გარეშე
const c = 5;
console.log(c); // 5
// ობიექტებისა და მასივებისათვის, რომლებიც გამოაცხადეს `const`-ით, შესაძლებელია მათი შიგთავსის შეცვლა
const obj = { სახელი: 'ტესტი' };
obj.სახელი = 'ახალი ტესტი'; // შესაძლებელია
// obj = { სახელი: 'სხვა ტესტი' }; // შეცდომა