ES6
giới thiệu Let
các biến đi kèm với block level scoping
. Cho đến khi ES5
chúng tôi không có block level scoping
, vì vậy các biến được khai báo bên trong một khối luôn nằm trong hoisted
phạm vi mức chức năng.
Về cơ bản Scope
đề cập đến nơi trong chương trình của bạn, các biến của bạn được hiển thị, xác định nơi bạn được phép sử dụng các biến bạn đã khai báo. Trong ES5
chúng tôi có global scope,function scope and try/catch scope
, với ES6
chúng tôi cũng có được phạm vi cấp khối bằng cách sử dụng Let.
- Khi bạn xác định một biến với
var
từ khóa, nó sẽ biết toàn bộ hàm từ thời điểm nó được xác định.
Khi bạn xác định một biến với let
câu lệnh, nó chỉ được biết đến trong khối mà nó được xác định.
function doSomething(arr){
//i is known here but undefined
//j is not known here
console.log(i);
console.log(j);
for(var i=0; i<arr.length; i++){
//i is known here
}
//i is known here
//j is not known here
console.log(i);
console.log(j);
for(let j=0; j<arr.length; j++){
//j is known here
}
//i is known here
//j is not known here
console.log(i);
console.log(j);
}
doSomething(["Thalaivar", "Vinoth", "Kabali", "Dinesh"]);
Nếu bạn chạy mã, bạn có thể thấy biến j
chỉ được biết trong loop
và không phải trước và sau. Tuy nhiên, biến của chúng tôi i
được biết đến entire function
từ thời điểm nó được xác định trở đi.
Có một lợi thế lớn khác khi sử dụng let vì nó tạo ra một môi trường từ vựng mới và cũng liên kết giá trị mới hơn là giữ một tham chiếu cũ.
for(var i=1; i<6; i++){
setTimeout(function(){
console.log(i);
},1000)
}
for(let i=1; i<6; i++){
setTimeout(function(){
console.log(i);
},1000)
}
for
Vòng lặp đầu tiên luôn in giá trị cuối cùng , với let
nó tạo ra một phạm vi mới và liên kết các giá trị mới in chúng tôi 1, 2, 3, 4, 5
.
Về constants
cơ bản, nó hoạt động cơ bản như thế let
, sự khác biệt duy nhất là giá trị của chúng không thể thay đổi. Trong hằng số đột biến được cho phép nhưng không được phép gán lại.
const foo = {};
foo.bar = 42;
console.log(foo.bar); //works
const name = []
name.push("Vinoth");
console.log(name); //works
const age = 100;
age = 20; //Throws Uncaught TypeError: Assignment to constant variable.
console.log(age);
Nếu một hằng đề cập đến một object
, nó sẽ luôn luôn đề cập đến object
nhưng object
chính nó có thể được thay đổi (nếu nó có thể thay đổi). Nếu bạn muốn có một bất biến object
, bạn có thể sử dụngObject.freeze([])
let foo = () => bar; let bar = 'bar'; foo();
minh họa tất cả các tuyên bố có hiệu lực thậm chí còn tốt hơn, bởi vì nó không rõ ràng do vùng chết tạm thời.