Các biến JavaScript có thể thuộc về phạm vi địa phương hoặc toàn cầu.local or global scope.
Các biến toàn cầu có thể được thực hiện tại địa phương [riêng tư] với việc đóng cửa.closures.
Biến toàn cầu
A function
có thể truy cập tất cả các biến được xác định bên trong hàm, như thế này:inside the function, like this:
Nhưng function
cũng có thể truy cập các biến được xác định bên ngoài hàm, như thế này:outside the function, like this:
Trong ví dụ cuối cùng, A là một biến toàn cầu.a is a global variable.
Trong một trang web, các biến toàn cầu thuộc về trang.
Các biến toàn cầu có thể được sử dụng [và thay đổi] bởi tất cả các tập lệnh khác trong trang.
Trong ví dụ đầu tiên, A là một biến cục bộ.a is a local variable.
Một biến cục bộ chỉ có thể được sử dụng bên trong hàm nơi nó được xác định. Nó được ẩn khỏi các chức năng khác và mã kịch bản khác.
Các biến toàn cầu và cục bộ có cùng tên là các biến khác nhau. Sửa đổi cái này, không sửa đổi cái khác.
Các biến được tạo mà không có từ khóa khai báo [var
, let
hoặc const
] luôn luôn toàn cầu, ngay cả khi chúng được tạo bên trong một hàm.without a declaration keyword [var
, let
, or const
] are always global, even if they are created inside a function.
Thời gian thay đổi
Các biến toàn cầu trực tiếp cho đến khi trang bị loại bỏ, như khi bạn điều hướng đến một trang khác hoặc đóng cửa sổ.
Các biến địa phương có cuộc sống ngắn ngủi. Chúng được tạo khi hàm được gọi và xóa khi hàm kết thúc.
Một vấn đề nan giải
Giả sử bạn muốn sử dụng một biến để đếm một cái gì đó và bạn muốn bộ đếm này có sẵn cho tất cả các chức năng.
Bạn có thể sử dụng một biến toàn cầu và function
để tăng bộ đếm:
Thí dụ
// bắt đầu bộ đếm đối diện = 0;
let counter = 0;
// Hàm để tăng cường đối phó add [] {& nbsp; & nbsp; bộ đếm += 1; }
function add[] {
counter += 1;
}
// gọi thêm [] 3 lần thêm []; cộng[]; cộng[];
add[];
add[];
add[];
// quầy bây giờ sẽ là 3
Hãy tự mình thử »
Có một vấn đề với giải pháp trên: Bất kỳ mã nào trên trang đều có thể thay đổi bộ đếm mà không cần gọi thêm [].
Bộ đếm phải là cục bộ cho chức năng add[]
, để ngăn mã khác thay đổi nó:
Thí dụ
// bắt đầu bộ đếm đối diện = 0;
let counter = 0;
// Hàm để tăng cường đối phó add [] {& nbsp; & nbsp; bộ đếm += 1; }
function add[] {
let counter = 0;
counter += 1;
}
// gọi thêm [] 3 lần thêm []; cộng[]; cộng[];
add[];
add[];
add[];
// quầy bây giờ sẽ là 3
Hãy tự mình thử »
Có một vấn đề với giải pháp trên: Bất kỳ mã nào trên trang đều có thể thay đổi bộ đếm mà không cần gọi thêm [].
Bộ đếm phải là cục bộ cho chức năng add[]
, để ngăn mã khác thay đổi nó:
Thí dụ
// bắt đầu bộ đếm đối diện = 0;
function add[] {
let counter = 0;
counter += 1;
return counter;
}
// gọi thêm [] 3 lần thêm []; cộng[]; cộng[];
add[];
add[];
add[];
// quầy bây giờ sẽ là 3
Hãy tự mình thử »
Có một vấn đề với giải pháp trên: Bất kỳ mã nào trên trang đều có thể thay đổi bộ đếm mà không cần gọi thêm [].
Bộ đếm phải là cục bộ cho chức năng add[]
, để ngăn mã khác thay đổi nó:A
JavaScript inner function can solve this.
// Hàm để tăng đối trọng thêm [] {& nbsp; Đặt bộ đếm = 0; & nbsp; Bộ đếm += 1;}
// gọi thêm [] 3 timesadd []; add []; add [];
// Bộ đếm bây giờ sẽ là 3. nhưng đó là 0
Nó không hoạt động vì chúng tôi hiển thị bộ đếm toàn cầu thay vì bộ đếm cục bộ.
Chúng ta có thể xóa bộ đếm toàn cầu và truy cập bộ đếm cục bộ bằng cách để chức năng trả về nó:
Thí dụ
// bắt đầu bộ đếm đối diện = 0;
let counter = 0;
function plus[] {counter += 1;}
plus[];
return counter;
}
Hãy tự mình thử »
Có một vấn đề với giải pháp trên: Bất kỳ mã nào trên trang đều có thể thay đổi bộ đếm mà không cần gọi thêm [].
Bộ đếm phải là cục bộ cho chức năng add[]
, để ngăn mã khác thay đổi nó:
// Hàm để tăng đối trọng thêm [] {& nbsp; Đặt bộ đếm = 0; & nbsp; Bộ đếm += 1;}
// gọi thêm [] 3 timesadd []; add []; add [];
// Bộ đếm bây giờ sẽ là 3. nhưng đó là 0
Thí dụ
// bắt đầu bộ đếm đối diện = 0;
let counter = 0;
return function [] {counter += 1; return counter}
}][];
// Hàm để tăng cường đối phó add [] {& nbsp; & nbsp; bộ đếm += 1; }
add[];
add[];
// gọi thêm [] 3 lần thêm []; cộng[]; cộng[];
Hãy tự mình thử »
Có một vấn đề với giải pháp trên: Bất kỳ mã nào trên trang đều có thể thay đổi bộ đếm mà không cần gọi thêm [].
Bộ đếm phải là cục bộ cho chức năng add[]
, để ngăn mã khác thay đổi nó:
// Hàm để tăng đối trọng thêm [] {& nbsp; Đặt bộ đếm = 0; & nbsp; Bộ đếm += 1;}
// gọi thêm [] 3 timesadd []; add []; add [];
// Bộ đếm bây giờ sẽ là 3. nhưng đó là 0closure. It makes it possible for a function to have "private" variables.
Nó không hoạt động vì chúng tôi hiển thị bộ đếm toàn cầu thay vì bộ đếm cục bộ.
Chúng ta có thể xóa bộ đếm toàn cầu và truy cập bộ đếm cục bộ bằng cách để chức năng trả về nó: