Tôi đang sử dụng JavaScript và tôi tạo một biến toàn cục. Tôi xác định nó bên ngoài một hàm và tôi muốn thay đổi giá trị biến toàn cục từ bên trong một hàm và sử dụng nó từ một hàm khác, làm thế nào để tôi làm điều này?
Tôi đang sử dụng JavaScript và tôi tạo một biến toàn cục. Tôi xác định nó bên ngoài một hàm và tôi muốn thay đổi giá trị biến toàn cục từ bên trong một hàm và sử dụng nó từ một hàm khác, làm thế nào để tôi làm điều này?
Câu trả lời:
Chỉ cần tham khảo biến bên trong hàm; không có phép thuật, chỉ cần sử dụng tên của nó. Nếu nó được tạo trên toàn cầu, thì bạn sẽ cập nhật biến toàn cục.
Bạn có thể ghi đè hành vi này bằng cách khai báo cục bộ bằng cách sử dụng var, nhưng nếu bạn không sử dụng var, thì tên biến được sử dụng trong hàm sẽ là toàn cục nếu biến đó đã được khai báo trên toàn cầu.
Đó là lý do tại sao nó được coi là thực tiễn tốt nhất để luôn khai báo các biến của bạn một cách rõ ràng var. Bởi vì nếu bạn quên nó, bạn có thể bắt đầu gây rối với toàn cầu một cách tình cờ. Đó là một sai lầm dễ mắc phải. Nhưng trong trường hợp của bạn, điều này quay lại và trở thành một câu trả lời dễ dàng cho câu hỏi của bạn.
console.lognó được chạy ngay lập tức, nhưng chức năng thành công ajax chỉ chạy vào một lúc nào đó khi cuộc gọi ajax thực sự trả lời phản hồi. Đây là một điểm cơ bản về bản chất không đồng bộ của ajax: mã trong các hàm đóng không chạy theo trình tự với mã xung quanh nó. Đây là một điều quan trọng để nắm bắt khi tìm hiểu về mã hướng sự kiện.
var a = 10;
myFunction();
function myFunction(){
a = 20;
}
alert("Value of 'a' outside the function " + a); //outputs 20
Chỉ cần sử dụng tên của biến đó.
Trong JavaScript, các biến chỉ cục bộ đối với một hàm, nếu chúng là (các) tham số của hàm hoặc nếu bạn khai báo chúng là cục bộ rõ ràng bằng cách nhập vartừ khóa trước tên của biến.
Nếu tên của giá trị cục bộ có cùng tên với giá trị toàn cục, hãy sử dụng windowđối tượng
Xem jsfiddle này
x = 1;
y = 2;
z = 3;
function a(y) {
// y is local to the function, because it is a function parameter
console.log('local y: should be 10:', y); // local y through function parameter
y = 3; // will only overwrite local y, not 'global' y
console.log('local y: should be 3:', y); // local y
// global value could be accessed by referencing through window object
console.log('global y: should be 2:', window.y) // global y, different from local y ()
var x; // makes x a local variable
x = 4; // only overwrites local x
console.log('local x: should be 4:', x); // local x
z = 5; // overwrites global z, because there is no local z
console.log('local z: should be 5:', z); // local z, same as global
console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a
Với ES2015 đã xuất hiện thêm hai từ khóa constvà letđiều này cũng ảnh hưởng đến phạm vi của một biến ( Đặc tả ngôn ngữ )
<script>
var x = 2; //X is global and value is 2.
function myFunction()
{
x = 7; //x is local variable and value is 7.
}
myFunction();
alert(x); //x is gobal variable and the value is 7
</script>
vartừ khóa bên trong hàm, sau đó bạn không phải xử lýdocument.getElementById("outside").value = x;
var a = 10;
myFunction(a);
function myFunction(a){
window['a'] = 20; // or window.a
}
alert("Value of 'a' outside the function " + a); //outputs 20
Với window [' biếnName '] hoặc window.variableName, bạn có thể sửa đổi giá trị của biến toàn cục bên trong hàm.