Đầu tiên chúng ta cần biết khái niệm scope là gì? Scope là phạm vi của một biến được khai báo mà ta có thể truy cập được. Trước khi ES6 được ra mắt, JavaScript chỉ có 2 loại scope là: Global scope và Function scope. Sau khi ES6 ra mắt thì JavaScript có thêm Block scope nữa.
Chúng ta cùng tìm hiểu từng loại một nhé
var speech = 'Welcome to JavaScript';
//--> Biến speech có thể sử dụng được ở đây
function say() {
//--> Biến speech cũng có thể sử dụng được ở đây
}
2. Block scope
Lưu ý: Bất kỳ biến nào được khai báo bằng từ khóa var
đều không thể có Block scope.
Do đó biến được khai báo bằng từ khóa var
bên trong block {}
thì có thể được truy cập ở bên ngoài block đó.
{
var a = 10;
}
//--> Có thể sử dụng biến a tại đây
Trước ES6, JavaScript không có khái niệm Block scope. Sau khi ES6 ra mắt, thì các biến được khai báo bằng let
và const
đều thuộc Block scope. Do đó các biến không thể được truy cập ở bên ngoài block được.
{
let a = 10;
}
//--> Không thể sử dụng được biến a tại đây
3. Function scope
Như tên gọi, các biến được khai báo cục bộ bên trong một function thì có Function scope.
function showCar() {
var name = 'lamborghini';
//--> Ta có thể sử dụng biến name ở đây
}
//--> Ta không thể sử dụng biến name ở đây
4. Loop scope
Như tên gọi, Loop scope đề cập đến phạm vi của biến trong các vòng lặp, ta cùng đến ví dụ để dễ hiểu hơn nhé 😁
Đầu tiên là sử dụng từ khóa var
trong vòng lặp
var i = 2;
for(var i = 0; i < 10; i++) {
//code ở đây
}
console.log(i); //--> i = 10
Trong ví dụ trên, biến i
được khai báo bằng từ khóa var
trong vòng lặp for
sẽ thay đổi giá trị của biến i
bên ngoài vòng lặp for
do đó sau khi chạy hết vòng lặp thì i = 10
Còn sử dụng từ khóa let
thì sao? cùng xem ví dụ và giải thích bên dưới nè 😉
let i = 2;
for(let i = 0; i < 10; i++) {
//code ở đây
}
console.log(i); //--> i = 2
Bản thân các biến được khai báo bằng từ khóa let
bên trong một block code sẽ có Block scope còn với biến được khai báo bên ngoài block code thì sẽ có Global scope do đó biến i
bên ngoài và bên trong for
sẽ không liên quan gì đến nhau. Vì thế kết quả cuối cùng i = 2