Variable Declarations

[jslet], [jsvar], [jsconst], [jsvariable]

Có 3 từ khóa trong javascript dùng để khai báo 1 biến var, let, const

var

var là từ khóa phổ biến dùng để khai báo 1 biến trong javascript. Biến được khai báo bằng var có hiệu lực trong function mà biến đó được khai báo ==function scope==

for (var i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(i);
  }, 100 * i);
}

Result:
10
10
10
10
10
10
10
10
10
10

Vấn đề của var

for (var i = 0; i < 5; i++) {
	console.debug(i);
	for (var i = 20; i < 25; i++) {
	  console.debug(i);
	}
}
Result: 
0
20
21
22
23
24

Kết quả khác hoàn toàn kết quả chúng ta mong đợi

Expect Result:

0
20
21
22
23
24

1
20
21
22
23
24
...
4
20
21
22
23
24

Lý do bởi scope khai báo của biến i. do i được khai báo bởi từ khóa var nên nó có scope từ vòng for đầu tiên trở xuống. Thay đổi giá trị i trong vòng for sẽ làm thay đổi giá trị của i. Dẫn đến kết quả sai.

for (var i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(i);
  }, 100 * i);
}
Result 
10
10
...
10

let

Từ khóa let dùng để giải quyết các vấn đề mà khai báo biến bằng var gặp phải. Scope của let là ==Block Scope==. Biến được khởi tạo bằng let chỉ có hiệu lực trong =={}== mà nó khai báo

for (let i = 0; i < 5; i++) {
	console.debug(i);
	for (let i = 20; i < 25; i++) {
	  console.debug(i);
	}
}
Result: 
0
20
21
22
23
24

1
20
21
22
23
24
...
4
20
21
22
23
24
for (let i = 0; i < 10; i++) {
  setTimeout(function () {
    console.log(i);
  }, 100 * i);
}
Result 
0
1
2
...
9

const

const là một mức cao hơn của let. Biến được khởi tạo bằng từ khóa này sẽ không thể thay đổi được giá trị của nó

  • Linkedin | Github