Hãy để JavaScript
Từ khóa let
được giới thiệu trong ES6 (2015)
Các biến được khai báo bằng let
có Phạm vi khối
Các biến được khai báo bằng let
phải được khai báo trước khi sử dụng
Các biến được khai báo bằng let
không thể được khai báo lại trong cùng một phạm vi
Phạm vi chặn
Trước ES6 (2015), JavaScript không có Block Scope .
JavaScript có Phạm vi toàn cầu và Phạm vi chức năng .
ES6 đã giới thiệu hai từ khóa JavaScript mới: let
và const
.
Hai từ khóa này đã cung cấp Phạm vi chặn trong JavaScript:
Ví dụ
Các biến được khai báo bên trong khối { } không thể được truy cập từ bên ngoài khối:
{
let x = 2;
}
// x can NOT be used here
Phạm vi toàn cầu
Các biến được khai báo bằng var
luôn có Global Scope .
Các biến được khai báo bằng từ khóa var
KHÔNG được có phạm vi khối:
Ví dụ
Các biến được khai báo bằng var
bên trong khối { } có thể được truy cập từ bên ngoài khối:
{
var x = 2;
}
// x CAN be used here
Không thể được khai báo lại
Các biến được xác định bằng let
không thể được khai báo lại.
Bạn không thể vô tình khai báo lại một biến được khai báo bằng let
.
Với let
bạn không thể làm điều này:
let x = "John Doe";
let x = 0;
Các biến được xác định bằng var
có thể được khai báo lại.
Với var
bạn có thể làm điều này:
var x = "John Doe";
var x = 0;
Khai báo lại các biến
Việc khai báo lại một biến bằng từ khóa var
có thể gây ra vấn đề.
Khai báo lại một biến bên trong một khối cũng sẽ khai báo lại biến bên ngoài khối đó:
Khai báo lại một biến bằng từ khóa let
có thể giải quyết được vấn đề này.
Khai báo lại một biến bên trong một khối sẽ không khai báo lại biến bên ngoài khối:
Sự khác biệt giữa var, let và const
Phạm vi | Khai báo lại | Phân công lại | nâng lên | Ràng buộc điều này | |
var | KHÔNG | Đúng | Đúng | Đúng | Đúng |
cho phép | Đúng | KHÔNG | Đúng | KHÔNG | KHÔNG |
hằng số | Đúng | KHÔNG | KHÔNG | KHÔNG | KHÔNG |
Điều gì tốt?
let
và const
có phạm vi khối .
let
và const
không thể được khai báo lại .
let
và const
phải được khai báo trước khi sử dụng.
let
và const
không liên kết với this
.
let
và const
không được nâng lên .
Điều gì là không tốt?
var
không cần phải khai báo.
var
được nâng lên.
var
liên kết với điều này.
Hỗ trợ trình duyệt
Từ khóa let
và const
không được hỗ trợ trong Internet Explorer 11 trở về trước.
Bảng sau xác định các phiên bản trình duyệt đầu tiên được hỗ trợ đầy đủ:
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
Khai báo lại
Việc khai báo lại một biến JavaScript bằng var
được phép ở bất kỳ đâu trong chương trình:
Với let
, KHÔNG được phép khai báo lại một biến trong cùng một khối:
Ví dụ
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
}
Khai báo lại một biến với let
, trong một khối khác, IS được phép:
Hãy cẩu
Các biến được xác định bằng var
được đưa lên trên cùng và có thể được khởi tạo bất kỳ lúc nào.
Ý nghĩa: Bạn có thể sử dụng biến trước khi nó được khai báo:
Nếu bạn muốn tìm hiểu thêm về hoisting, hãy nghiên cứu chương JavaScript Hoisting .
Các biến được xác định bằng let
cũng được đưa lên đầu khối nhưng không được khởi tạo.
Ý nghĩa: Sử dụng biến let
trước khi nó được khai báo sẽ dẫn đến ReferenceError
: