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' }; // Σφάλμα