Đầ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é 

1. Global scope

Các biến mà được khai báo bên ngoài bất kỳ function nào thì đều thuộc Global scope. Với các biến thuộc Global scope đều có thể truy cập được từ bất cứ đâu trong chương trình JavaScript.

				
					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

Leave a Reply

Your email address will not be published. Required fields are marked *