Từ khóa Các biến được xác định bằng Các biến được xác định bằng Các biến được xác định bằng |
Không thể 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;
Nhưng với var
bạn có thể:
var x = "John Doe";
var x = 0;
Phạm vi khối
Trước ES6 (2015), JavaScript có Phạm vi toàn cầu và Phạm vi hàm.
ES6 đã giới thiệu hai từ khóa JavaScript mới quan trọng: let
và const
.
Hai từ khóa này cung cấp Phạm vi khối trong JavaScript.
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
Các biến được khai báo bằng từ khóa var
KHÔNG được có phạm vi khối.
Các biến được khai báo 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
Khai báo lại 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 đó:
var x = 10;
// Here x is 10
{
var x = 2;
// Here x is 2
}
// Here x is 2
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:
let x = 10;
// Here x is 10
{
let x = 2;
// Here x is 2
}
// Here x is 10
Sự khác nhau giữa var, let và const
Phạm vi | Khai báo lại | Gán lại | Hoisted | Binds this | |
var | Không | Có | Có | Có | Có |
let | Có | Không | Có | Không | Không |
const | Có | Không | Không | Không | Không |
Ưu điểm
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 di chuyển lên đầu phạm vi trước khi chúng được thực thi.
Khuyết điểm
var
không cần phải khai báo.
var
được được di chuyển lên đầu phạm vi trước khi chúng được thực thi.
var
liên kết với this.
Trình duyệt hỗ trợ
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:
var x = 2;
// Now x is 2
var x = 3;
// Now x is 2
Với let
, KHÔNG được phép khai báo lại một biến trong cùng một khối:
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 bằng let
, trong một khối khác, được phép:
let x = 2; // Allowed
{
let x = 3; // Allowed
}
{
let x = 4; // Allowed
}
Hoisting
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 là bạn có thể sử dụng biến trước khi nó được khai báo:
carName = "Volvo";
var carName;
Nếu bạn muốn tìm hiểu thêm về hoisting, hãy nghiên cứu bài 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.
Vì thế sử dụng biến let trước khi nó được khai báo sẽ dẫn đến lỗi ReferenceError: