2012-06-03 95 views

Trả lời

104

Chỉ cần tham khảo các 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 ra 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 một hàm sẽ là toàn cầu nếu biến đó đã được khai báo trên toàn cầu.

Đó là lý do tại sao được coi là phương pháp hay nhất để luôn khai báo biến của bạn một cách rõ ràng với var. Bởi vì nếu bạn quên nó, bạn có thể bắt đầu lộn xộn với globals do tai nạn. Đó là một sai lầm dễ dàng để thực hiện. 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.

+1

này không làm việc cho tôi: country = 'foo' $ .ajax ({ url: '/ some-thiết bị đầu cuối, thành công: function (data) { country = data.country; } }); console.log (quốc gia) // output 'foo' –

+28

@MarkSimpson - lý do nó không hoạt động vì trong ví dụ của bạn, 'console.log' được chạy ngay lập tức, nhưng hàm thành công ajax chỉ chạy tại một số điểm sau đó khi cuộc gọi ajax thực sự trả về một 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 thứ 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. – Spudley

+0

Cảm ơn bạn đã giải thích, @Spudley –

39
var a = 10; 

myFunction(); 

function myFunction(){ 
    a = 20; 
} 

alert("Value of 'a' outside the function " + a); //outputs 20 
+0

cảm ơn ví dụ đơn giản tuyệt vời này. Logic của điều này đã được thực hiện trong đầu của tôi. Chỉ cần làm quen với tư duy 4d. – Mikey3Strings

18

Chỉ cần sử dụng tên của biến đó.

Trong JavaScript, biến chỉ là cục bộ cho hàm, nếu chúng là tham số của hàm hoặc nếu bạn khai báo chúng một cách rõ ràng bằng cách gõ từ khóa var trước tên của biến.

Nếu tên của giá trị cục bộ có tên tương tự như các giá trị toàn cầu, sử dụng đối tượng window

Xem này jsfiddle

x = 1; 
y = 2; 
function a(y) { 
    // y is local to the function, because it is a function parameter 
    alert(y); // 10 
    y = 3; // will only overwrite local y, not 'global' y 
    var x; // makes x a local variable 
    x = 4; // only overwrites local x 
    alert(y); // 3 
    alert(x); // 4 
    // global value could be accessed by referencing through window object 
    alert(window.y) // 2 global y 
} 
a(10); 
alert(x); // 1; this is the global value 
alert(y); // 2; global as well 
+1

+1 để mô tả va chạm tên giữa biến toàn cầu và biến cục bộ được khai báo và cách truy cập nó. – gdbj

5
<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> 
+0

Chỉ cần không sử dụng từ khóa 'var' bên trong hàm, sau đó bạn không phải đối phó với' document.getElementById ("outside"). Value = x; ' –

Các vấn đề liên quan