2009-07-22 32 views
6

Làm cách nào để thực hiện việc này?Sử dụng biến toàn cầu trong javascript

Mã của tôi là một cái gì đó như thế này:

var number = null; 

function playSong(artist,title,song,id) 
{ 
    alert('old number was: '+[number]+''); 


    var number = '10'; 

    alert(''+[number]+''); 
} 

Cảnh báo đầu tiên luôn luôn trả về 'số cũ là:' chứ không phải 10 nên không nó trở lại 10 trên cả hai thông báo trên các cuộc gọi chức năng thứ hai?

+0

Chết tiệt Ya'll! Cảm ơn tất cả các câu trả lời quá nhanh. – ian

+1

Tại sao bạn viết cảnh báo ('số cũ là:' + [số] + ''); và không phải cảnh báo ('số cũ là:' + số); Bởi vì nó sẽ cảnh báo một mảng với một mục bên trong, không phải là mục (số) –

+0

Hmmm dunno nhưng nó hoạt động. Tôi không nghĩ rằng nó sẽ tìm kiếm bất kỳ mảng vì tôi tham gia không gian trống ở phía bên phải + ''; hoặc có lẽ không phải tôi không biết. – ian

Trả lời

15

Bằng cách sử dụng var khi thiết number = '10', bạn đang tuyên bố number như là một biến địa phương mỗi lần. Hãy thử điều này:

var number = null; 

function playSong(artist,title,song,id) 
{ 
    alert('old number was: '+[number]+''); 


    number = '10'; 

    alert(''+[number]+''); 
} 
+0

Làm thế nào để bạn truy cập vào trang biến đó, hàm playSong và nhận giá trị 10? – johnsnails

+0

@johnsnails Biến được khai báo bên ngoài hàm, vì vậy khi gán số = 10 thì biến số toàn cầu của nó được gọi nhưng nếu chúng ta sử dụng var number = '10' ở hàm bên thì nó sẽ có phạm vi cục bộ, chúng ta sẽ không nhận giá trị 10 bên ngoài hàm. –

11

Xóa biến số trước số trong hàm của bạn. Bạn đang tạo một biến địa phương bằng cách

var number = 10; 

những gì bạn cần chỉ là

number = 10; 
3

Vấn đề là bạn đang khai báo một biến mới có tên number bên trong của hàm. Biến mới này ẩn biến số number toàn cầu, do đó, dòng number = 10 chỉ gán cho biến địa phương mới này.

Bạn cần phải xóa từ khóa var từ var number = 10.

1

Giống như trong C, bạn cần xác định biến của mình bên ngoài hàm/phương thức để biến toàn cục.

var number = 0; 

function playSong(artist,title,song,id) 
{ 
    alert('old number was: '+[number]+''); 
    number = '10'; 
    alert(''+[number]+''); 
} 
+0

Đó là yên tâm để xem cùng một câu trả lời được đăng trong cùng một phút. –

+2

Thực ra, bất kỳ định nghĩa nào không có 'var' sẽ là biến toàn cục, bất kể nó được xác định ở đâu. Javascript có thể đáng sợ. –

+0

Bạn học điều gì đó mới mỗi ngày. –

1

Bạn cũng có thể truy cập vào bất kỳ chức năng nào như window.number, sau khi xóa hàm var bên trong.

0

Hãy để tôi giải thích một cách chi tiết, Để khai báo biến toàn cục và biến cục bộ trong javascript

var firstNumber=5;//local variable 
secondNumber=10; //global variable or window object 

Khi chương trình của bạn là như thế này

var number =1; 
function playSong() { 
    alert(number); 
    var number =2; 
    alert(number); 
} 

Theo trình biên dịch Javascript tất cả Tuyên bố/khởi tạo của biến sẽ di chuyển lên trên khái niệm này được gọi là Hoisting. Link: https://www.w3schools.com/js/js_hoisting.asp

Theo chương trình biên dịch sẽ thực hiện như

var number; //Declaration will move to top always in Javascript 
number=1; 
function playSong() { 
    var number; 
    alert(number); //output : undefied - This is local variable inside the function 
    number =2; 
    alert(number); // output : 2 
} 

Nếu bạn cần truy cập vào biến toàn cầu trong việc sử dụng chức năng window.number

var number =1; 
function playSong() { 
    var number =2; 
    alert(window.number); // output : 1 -From Global variable 
    alert(number); // output : 2 -From local variable 
} 
Các vấn đề liên quan