2012-09-28 151 views
1

什麼樣的變量可以在JavaScript的函數之外聲明?我在理解下面的代碼時遇到了一些問題。在函數之外聲明變量

此代碼不影響subtitle

var element = window.document.getElementById("subtitle"); 
var test = "Changed!"; 

function check(){ 
    element.innerHTML = test; 
} 

但是,如果我移動element裏面的函數,那麼subtitle元素更改爲「改變了!」。

var test = "Changed!"; 

function check() 
{ 
    var element = window.document.getElementById("subtitle"); 
    element.innerHTML = test; 
} 

有沒有說window對象不能被分配到var外的函數的規則,有沒有在代碼中的錯誤的,或者我只是不理解JavaScript的變量?

+0

當你說,它「按預期工作」,你的意思是,代碼加載正確,或當你執行它的功能你期望什麼? – murgatroid99

+0

變量可以在任何地方聲明。如果你的第一個例子「不起作用」,那麼在某處可能會有錯誤,但它不在你發佈的代碼中。問題可能是傑夫在答案中解釋的。 –

+0

對不起,我更新了這篇文章。 「按預期工作」意味着「subtitle」元素內部的文本變成「已更改!」。 – 425nesp

回答

2

全局變量可以包含任何數據類型。顯示的第一個代碼很可能不起作用,因爲當您獲取element的值時,文檔未加載,而第二個代碼正在工作,因爲在調用check()時加載文檔。

如果你想使用全局變量,試試這個:

var element; 
var test = "Changed!"; 

window.onload = function() { 
    element = window.document.getElementById("subtitle"); 
    check(); 
} 
+1

或者將代碼放在頁面的底部。 –

+0

是的!當然,「文檔」尚未加載。謝謝,我現在明白了。所以,只有在'window'被加載之後,我們才能開始調用'document'中的元素。 – 425nesp