Sobes.tech
Junior

Με ποιους τρόπους μπορεί κανείς να δηλώσει μεταβλητές στη JavaScript; Αναφέρετε τις διαφορές μεταξύ αυτών των μεθόδων.

sobes.tech AI

Απάντηση από AI

Στη JavaScript, οι μεταβλητές μπορούν να δηλωθούν με τρεις τρόπους: var, let, const.

Οι διαφορές μεταξύ τους:

Διαφορά var let const
Περιοχή Λειτουργική Μπλοκ Μπλοκ
Επανάληψη ορισμού Δυνατόν Δυνατόν Αδύνατον
Επανάθεση Δυνατόν Δυνατόν Αδύνατον
Hoisting Ανασηκώνει την δήλωση και την αρχικοποίηση σε undefined Ανασηκώνει την δήλωση, αλλά όχι την αρχικοποίηση Ανασηκώνει την δήλωση, αλλά όχι την αρχικοποίηση

Παραδείγματα:

// var
function παράδειγμαVar() {
  var x = 10; // Λειτουργική περιοχή
  if (true) {
    var x = 20; // Δυνατόν επανάληψη ορισμού στην ίδια λειτουργία
    console.log(x); // 20
  }
  console.log(x); // 20 (η μεταβλητή x από το if είναι προσβάσιμη εδώ)
}

console.log(x); // Σφάλμα: ReferenceError: x δεν ορίζεται (x δεν είναι ορατή εκτός της λειτουργίας)

// Hoisting με var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function παράδειγμαLet() {
  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 παράδειγμαConst() {
  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 = { name: 'Test' };
obj.name = 'Νέο Test'; // Επιτρεπτό
// obj = { name: 'Άλλο Test' }; // Σφάλμα