Sobes.tech
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 = { სახელი: 'სხვა ტესტი' }; // შეცდომა