Trong hướng dẫn này, bạn sẽ tìm hiểu về phạm vi biến trong JavaScript với sự trợ giúp của các ví dụ.
Phạm vi đề cập đến tính khả dụng của các biến và chức năng trong các phần nhất định của mã.
Trong JavaScript, một biến có hai loại phạm vi:
- Phạm vi toàn cầu
- Phạm vi địa phương
Phạm vi toàn cầu
Một biến được khai báo ở đầu chương trình hoặc bên ngoài một hàm được coi là một biến phạm vi toàn cục.
Hãy xem một ví dụ về một biến phạm vi toàn cục.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
Trong chương trình trên, biến a được khai báo ở đầu chương trình và là biến toàn cục. Nó có nghĩa là biến a
có thể được sử dụng ở bất kỳ đâu trong chương trình.
Giá trị của một biến toàn cục có thể được thay đổi bên trong một hàm. Ví dụ,
// program to show the change in global variable let a = "hello"; function greet() ( a = 3; ) // before the function call console.log(a); //after the function call greet(); console.log(a); // 3
Trong chương trình trên, biến a là một biến toàn cục. Giá trị của a là hello. Sau đó, biến a được truy cập bên trong một hàm và giá trị thay đổi thành 3.
Do đó, giá trị của một thay đổi sau khi thay đổi nó bên trong hàm.
Lưu ý : Bạn nên tránh sử dụng các biến toàn cục vì giá trị của một biến toàn cục có thể thay đổi trong các khu vực khác nhau trong chương trình. Nó có thể giới thiệu các kết quả chưa biết trong chương trình.
Trong JavaScript, một biến cũng có thể được sử dụng mà không cần khai báo. Nếu một biến được sử dụng mà không khai báo, biến đó sẽ tự động trở thành một biến toàn cục.
Ví dụ,
function greet() ( a = "hello" ) greet(); console.log(a); // hello
Trong chương trình trên, biến a là một biến toàn cục.
Nếu biến được khai báo bằng cách sử dụng let a = "hello"
, chương trình sẽ báo lỗi.
Lưu ý : Trong JavaScript, có "strict mode";
một biến không thể được sử dụng nếu không khai báo nó. Để tìm hiểu thêm về nghiêm ngặt, hãy truy cập JavaScript Nghiêm ngặt.
Phạm vi địa phương
Một biến cũng có thể có phạm vi cục bộ, tức là nó chỉ có thể được truy cập trong một hàm.
Ví dụ 1: Biến phạm vi cục bộ
// program showing local scope of a variable let a = "hello"; function greet() ( let b = "World" console.log(a + b); ) greet(); console.log(a + b); // error
Đầu ra
helloWorld Uncaught ReferenceError: b không được định nghĩa
Trong chương trình trên, biến a là biến toàn cục và biến b là biến cục bộ. Biến b chỉ có thể được truy cập bên trong hàm chào. Do đó, khi chúng ta cố gắng truy cập vào biến b bên ngoài hàm, một lỗi sẽ xảy ra.
cho phép là Block Scoped
Các let
từ khóa là khối scoped (biến thể được truy cập chỉ trong khối ngay lập tức).
Ví dụ 2: Biến phạm vi khối
// program showing block-scoped concept // global variable let a = 'Hello'; function greet() ( // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') ( // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); ) // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c); ) greet();
Đầu ra
Xin chào thế giới Xin chào thế giới xin chào Chưa có tài liệu tham khảoError: x không được định nghĩa
Trong chương trình trên, biến
- a là một biến toàn cục. Nó có thể được truy cập ở bất kỳ đâu trong chương trình.
- b là một biến cục bộ. Nó chỉ có thể được truy cập bên trong hàm
greet
. - c là một biến phạm vi khối. Nó chỉ có thể được truy cập bên trong
if
khối câu lệnh.
Do đó, trong chương trình trên, hai phần đầu tiên console.log()
hoạt động mà không có vấn đề gì.
Tuy nhiên, chúng tôi đang cố gắng truy cập biến phạm vi khối c bên ngoài khối trong phần thứ ba console.log()
. Điều này sẽ tạo ra một lỗi.
Lưu ý : Trong JavaScript, var
là phạm vi chức năng và phạm vi let
khối. Nếu bạn cố gắng sử dụng var c = 'hello';
bên trong if
câu lệnh trong chương trình trên, toàn bộ chương trình sẽ hoạt động, vì c được coi như một biến cục bộ.
Để tìm hiểu thêm về let
so sánh var
, hãy truy cập JavaScript let vs var.