Biến toàn cục và biến cục bộ trong Javascript

Học Javascript 31/01/2015 07:00 614
Trong Javascript biến có hai phạm vi là cục bộ và toàn cục. Trong đó biến toàn cục là biến được khai báo bên ngoài hàm và được sử dụng ở tất cả các vị trí, biến cục bộ là biến khai báo ở trong hàm và chỉ sử dụng được trong nội bộ của hàm đó thôi.

1. Biến cục bộ trong Javascript

Một biến được gọi là biến cục bộ khi ta khai báo nó ở trong phạm vi một hàm cụ thể nào đó. Biến này sẽ không được truy suất bên ngoài hàm.

P/s: Khi gọi biến cục bộ ngoài hàm thì nó sẽ có giá trị là undefined.

Ví dụ 01:

function showMessage(){
    // Khai báo biến cục bộ
    var message = "Nội dung message"; 
     
    // Truy suất hợp lệ vì biến message được khai báo trong hàm
    alert(message );
}
 
// Truy suất này không hợp lệ vì biến message không tồn tại.
alert(message);

2. Biến toàn cục trong Javascript

Một biến được gọi là biến toàn cục khi chúng được khai báo bên ngoài và không nằm trong một hàm cụ thể nào cả. Giá trị của nó có thể truy suất và sửa đổi ở bất kỳ đâu trong chương trình của bạn.

Ví dụ 02:

<script>
	// Khai báo biến toàn cục
	var number = 100;  
	
	// Khởi tạo hàm
	function example(){
		document.write(number); 
	}
	
	example(); 
</script>

Xem kết quả

Một biến cục bộ có thể có cùng tên với biến toàn cục, nhưng nó hoàn toàn tách biệt với nhay. Việc thay đổi giá trị của một biến này sẽ không làm ảnh hưởng đến giá trị của biến kia. Biến cục bộ chỉ có phạm vi bên trong hàm mà nó được khai báo.

Ví dụ 03:

<script>
	// Định nghĩa một biến toàn cục
	var msg = "Xin chào ";
	function setMsg(){
		// Khai báo một biến cục bộ trong hàm
		var msg = "Học lập trình Javascript";
	}
	
	setMsg();
	msg += "các bạn tới www.chiasephp.net";
	
	// Output
	alert(msg);
</script>

Xem kết quả

Trong JavaScript, các biến được đánh giá như thể đã được khi báo ở đầu trong phạm vi chúng tồn tại. Đôi khi điều này dẫn đến hành vi bất ngờ, các bạn có thể xem ví dụ sau.

Ví dụ 04:

<script>
	// Khai báo biến toàn cục
	var number = 100;  
	// Call function
	example(); 
	 
	// Khởi tạo hàm
	function example(){ 
		// Kết quả sẽ là "undefined". Vì thực tế biến number cũng được khai báo cụ bộ ở phía dưới
		document.write(number);  
		if (false)  {  
			var number = 123;    
		}  
	}  
</script>

Xem kết quả

Khi Javascript thi hành một hàm cụ thể, đầu tiên nó sẽ tìm tất cả các biến đã được khai báo, e.g var someVariable. Nó tạo ra các biến với một giá trị ban đầu là undefined. Nếu một biến được khai báo với một giá trị cụ thể, e.g var someVariable = "something", thì ban đầu nó vẫn có giá trị là undefined và nó chỉ được gán giá trị khi dòng code chứa khai báo được thực thi.

Javascript xử lý tất cả các biến được khai báo trước khi thực hiện bất kỳ lệnh nào, cho dù khai báo ở bên trong khối điều kiện hoặc hàm khởi tạo khác. Khi Javascript đã tìm được tất cả các biến, nó thực thi mã trong hàm. Nếu một biến được khai báo ngầm bên trong một hàm - điều đó có nghĩa rằng nếu nó xuất hiện ở phía bên trái của biểu thức gán nhưng không được khai báo với var - nó được tạo ra như một biến toàn cục.

Ví dụ 05:

<script language="javascript">
	// Biến toàn cục
	var msg = "Nội dung message trước khi thay đổi";
	
	// Hàm có sử dụng biến toàn cục
	function showMsg(){
		msg = "Nội dung message đã bị thay đổi";
		document.write(msg);
	}
	
	// Gọi fuction comment
	showMsg();

	document.write('<br />');

	// In biến toàn cục
	document.write(msg);
</script>

Xem kết quả

3. Kết luận

Tóm lại biến toàn cục là biến được khai báo bên ngoài hàm và được sử dụng ở tất cả các vị trí, biến cục bộ là biến khai báo ở trong hàm và chỉ sử dụng được trong nội bộ của hàm đó thôi, sau khi hàm thực thi xong thì ngay lập tức nó sẽ bị xóa khỏi bộ nhớ. Và một chú ý quan trọng khác là ở phần ví dụ bạn cần hiểu được trường hợp ghi đè tên biến thông qua từ khóa var ở trong hàm nhé.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.