Εισήχθη η λέξη-κλειδί let
ES6 (2015)
Οι μεταβλητές που ορίζονται με let
δεν μπορούν να δηλωθούν ξανά
Οι μεταβλητές που ορίζονται με let
πρέπει να δηλωθούν πριν από τη χρήση
Οι μεταβλητές που ορίζονται με let
έχουν Block Scope
Οι μεταβλητές που ορίζονται με let
δεν μπορούν να δηλωθούν εκ νέου.
Δεν μπορείτε να επαναδηλώσετε κατά λάθος μια μεταβλητή που έχει δηλωθεί με let
.
Με το ας
δεν μπορείτε να κάνετε αυτό:
let x = "John Doe";
let x = 0;
Με το var
μπορείτε:
var x = "John Doe";
var x = 0;
Πριν από το ES6 (2015), η JavaScript είχε Παγκόσμιο εύρος και Εύρος λειτουργίας.
Το ES6 παρουσίασε δύο σημαντικές νέες λέξεις-κλειδιά JavaScript: let
και const
.
Αυτές οι δύο λέξεις-κλειδιά παρέχουν Εύρος αποκλεισμού σε JavaScript.
Δεν είναι δυνατή η πρόσβαση στις μεταβλητές που δηλώνονται μέσα σε ένα μπλοκ { } έξω από το μπλοκ:
{
let x = 2;
}
// x can NOT be used here
Οι μεταβλητές που δηλώνονται με τη λέξη-κλειδί var
ΔΕΝ μπορούν να έχουν εμβέλεια αποκλεισμού.
Οι μεταβλητές που δηλώνονται μέσα σε ένα μπλοκ { } είναι προσβάσιμες από έξω από το μπλοκ.
{
var x = 2;
}
// x CAN be used here
Η εκ νέου δήλωση μιας μεταβλητής χρησιμοποιώντας τη λέξη-κλειδί var
μπορεί να δημιουργήσει προβλήματα.
Η εκ νέου δήλωση μιας μεταβλητής μέσα σε ένα μπλοκ θα επαναδηλώσει επίσης τη μεταβλητή έξω από το μπλοκ:
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>Redeclaring a Variable Using var</h2>
<p id="demo"></p>
<script>
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Η εκ νέου δήλωση μιας μεταβλητής χρησιμοποιώντας τη λέξη-κλειδί let
μπορεί να λύσει αυτό το πρόβλημα.
Η εκ νέου δήλωση μιας μεταβλητής μέσα σε ένα μπλοκ δεν θα επαναδηλώνει τη μεταβλητή εκτός το μπλοκ:
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>Redeclaring a Variable Using let</h2>
<p id="demo"></p>
<script>
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Scope | Redeclare | Reassign | Hoisted | Binds this | |
var | No | Yes | Yes | Yes | Yes |
let | Yes | No | Yes | No | No |
const | Yes | No | No | No | No |
ας
και const
έχουν μπλοκ εμβέλειας.
ας
και const
δεν μπορεί να επαναδηλωθεί.
ας
και const
πρέπει να δηλωθεί πριν από τη χρήση.
ας
και const
δεν δεσμεύεται σε αυτό
.
ας
και const
δεν ανυψώνονται.
Το var
δεν χρειάζεται να δηλωθεί.
Το var
ανυψώνεται.
Το var
συνδέεται με αυτό.
Οι λέξεις-κλειδιά let
και const
είναι δεν υποστηρίζεται στον Internet Explorer 11 ή παλαιότερη έκδοση.
Ο παρακάτω πίνακας ορίζει τις πρώτες εκδόσεις του προγράμματος περιήγησης με πλήρη υποστήριξη:
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
Επιτρέπεται η εκ νέου δήλωση μεταβλητής JavaScript με var
οπουδήποτε σε ένα πρόγραμμα:
var x = 2;
// Now x is 2
var x = 3;
// Now x is 3
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript let</h2>
<p>Redeclaring a JavaScript variable with <b>var</b> is allowed anywhere in a program:</p>
<p id="demo"></p>
<script>
var x = 2;
// Now x is 2
var x = 3;
// Now x is 3
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Με το let
, ΔΕΝ επιτρέπεται η εκ νέου δήλωση μεταβλητής στο ίδιο μπλοκ:
var x = 2; // Allowed
let x = 3; // Not allowed
{
let x = 2; // Allowed
let x = 3; // Not allowed
}
{
let x = 2; // Allowed
var x = 3; // Not allowed
}
Επιτρέπεται η εκ νέου δήλωση μεταβλητής με let
, σε άλλο μπλοκ:
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript let</h2>
<p>Redeclaring a variable with <b>let</b>, in another scope, or in another block, is allowed:</p>
<p id="demo"></p>
<script>
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
Οι μεταβλητές που ορίζονται με var
ανυψώνονται στην κορυφή και μπορεί να αρχικοποιηθεί ανά πάσα στιγμή. <p>Σημασία: Μπορείτε να χρησιμοποιήσετε τη μεταβλητή πριν δηλωθεί:
Αυτό είναι εντάξει:
carName = "Volvo";
var carName;
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Hoisting</h2>
<p>With <b>var</b>, you can use a variable before it is declared:</p>
<p id="demo"></p>
<script>
carName = "Volvo";
document.getElementById("demo").innerHTML = carName;
var carName;
</script>
</body>
</html>
Εάν θέλετε να μάθετε περισσότερα για την ανύψωση, μελετήστε το κεφάλαιο Ανύψωση JavaScript. <p>Οι μεταβλητές που ορίζονται με let
ανυψώνονται επίσης στην κορυφή του μπλοκ, αλλά δεν έχει αρχικοποιηθεί.
Σημασία: Η χρήση μιας μεταβλητής let
πριν δηλωθεί θα έχει ως αποτέλεσμα Σφάλμα αναφοράς
:
carName = "Saab";
let carName = "Volvo";
Δοκιμάστε το μόνοι σας →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Hoisting</h2>
<p>With <b>let</b>, you cannot use a variable before it is declared.</p>
<p id="demo"></p>
<script>
try {
carName = "Saab";
let carName = "Volvo";
}
catch(err) {
document.getElementById("demo").innerHTML = err;
}
</script>
</body>
</html>