2012-05-23 132 views
1

我一直在用磚頭牆把我的頭撞到牆上,而這一幕又一次都沒有成功。我想要做的是訪問函數內的數組中設置的值,但不在該函數內。這怎麼能做到?例如:如何訪問功能之外的Javascript變量值

function profileloader() 
{ 
    profile = []; 
    profile[0] = "Joe"; 
    profile[1] = "Bloggs"; 
    profile[2] = "images/joeb/pic.jpg"; 
    profile[3] = "Web Site Manager"; 
} 

我會再往一個段落標記中的頁面有類似:

document.write("Firstname is: " + profile[0]); 

顯然,這將在腳本標籤包含有但所有我得到的是控制檯上出現錯誤:「配置文件[0]未定義」。

任何人有任何想法,我哪裏會出錯?我似乎無法解決這個問題,並且在將函數的值傳遞給函數或函數之外時,我所見過的其他解決方案都無法實現。

謝謝任何​​能夠幫助我的人,它可能是我錯過的簡單東西!

回答

4

既然你沒有在profile=[];的前面有var,它存儲在全局窗口範圍內。

我懷疑是在使用它之前忘記調用profileloader()。

這是很好的做法是在一個明顯的方式來聲明全局變量,如在其他的答案本頁面

它不被認爲是很好的做法,依靠副作用上。


註釋掉的代碼顯示是怎麼回事,注意不推薦的方法:

這應該工作。它確實有效:DEMO

function profileloader() 
{ 
    profile = []; // no "var" makes this global in scope 
    profile[0] = "Joe"; 
    profile[1] = "Bloggs"; 
    profile[2] = "images/joeb/pic.jpg"; 
    profile[3] = "Web Site Manager"; 
} 
profileloader(); // mandatory 
document.write("Firstname is: " + profile[0]); 
+0

請不要推薦未聲明的變量,更好的是將它們聲明在要使用的範圍中,然後分配給它們。 – RobG

+1

我在哪裏推薦未申報的增值稅? – mplungjan

+2

那麼,你不建議宣佈他們,* ipso * * facto *你建議不宣佈他們。 :-) – RobG

3

聲明它的函數外部,外面的範圍可以看到它(注意全局的雖然)

var profile = []; 
function profileloader(){ 
    profile[0] = "Joe"; 
    profile[1] = "Bloggs"; 
    profile[2] = "images/joeb/pic.jpg"; 
    profile[3] = "Web Site Manager"; 
} 

或有函數返回它:

function profileloader(){ 
    var profile = []; 
    profile[0] = "Joe"; 
    profile[1] = "Bloggs"; 
    profile[2] = "images/joeb/pic.jpg"; 
    profile[3] = "Web Site Manager"; 
    return profile; 
} 

var myprofile = profileloader(); //myprofile === profile 
+1

好的假設,但不正確。 var的缺乏使得它成爲一個全局變量。 – mplungjan

+0

@ mplungjan - 關於它沒有任何「不正確的」。將它明確地聲明爲全局更好,因此很明顯,範圍旨在對可能維護代碼的其他人是全局而非偶然的。 – RobG

+1

我的意思是,OP的問題是由於未申報的變量導致的錯誤。對不起,如果不明確。如果重新閱讀我不回答使用本地聲明的全局變量的答案,你會明白我的意思。 – mplungjan