2011-10-27 261 views
0

這讓我很煩惱。Javascript中的全局變量

進出口設置在文檔的開頭的數組:

var idPartner; 

var myar = new Array(); 
myar[0] = "http://site.com/"+idPartner; 

並即時得到一些在地址至極是合作伙伴的標識。大。但是我想將它設置都沒有成功:

$.address.change(function(event) { 
    idPartner = 3; 
    alert(idPartner); 
} 

確定。警報提供給我正確的號碼,但沒有設置它。

怎麼了?

謝謝!

+0

你可以嘗試在http://jsfiddle.net的刻板複製問題? –

+0

使用'[]'文字符號而不是'new Array'。 (它不會解決這個問題,但無論如何都會更好)。 – hugomg

+0

它如何提醒正確的號碼,但沒有設置它? – Jack

回答

4

更改變量的值不會重新設置數組中的值。這只是JavaScript不能自動執行的。您將不得不重新生成數組,以獲得新的ID。您可以將id添加到您使用數組的值而不是預先設置包含id的數組中的值嗎?

編輯:例如,你會怎麼做:

var myArray = []; 
var myId = 0; 
myArray[0] = "http://foo.com/id/"; 

,當你需要從數組中使用的值,你可以這樣做:

var theVal = myArray[0] + myId; 
+0

早在當天,ALGOL就有了一個名副其實的選項,可以完成這種工作。很奇怪,呃? – hugomg

+0

太好了。是嗎。我創建了一個函數來爲我設置我想要的id。謝謝! –

1

試試這個:

var myvar = ["http://site.com/"]; 


$.address.change(function(event) { 
    myvar[1] = 3; 
} 

然後使用myvar.join(),你需要完整的url。

0

這裏的問題是,在該行

myar[0] = "http://site.com/"+idPartner; 

..你執行字符串連接,這意味着你拷貝結果字符串到數組中的索引位置0

因此,當稍後設置​​它將不會對先前的複製的字符串產生任何影響。爲了避免這樣的效果,你可以隨時重新構造字符串時​​變量更新或創建的對象和評估它當你需要它就像...

var MyObject = function(){ 
    this.idPartner = 0; //default value 
}; 

MyObject.prototype.getUrl = function(){ 
    return "http://site.com/" + this.idPartner; 
}; 

通過這種方式,你可以使用它像

var myGlblUrlObj = new MyObject(); 

$.address.change(function(event){ 
    myGlblUrlObj.idPartner = ... /setting it here 
}); 

在以後的某個時候,你就可以總是使用

myGlblUrlObj.getUrl(); 

現在正確的URL顯然這取決於你的situat的複雜性離子。也許建議的陣列解決方案也可以工作,儘管我更喜歡將它封裝在對象中的某個位置以獲得更好的可重用性。

0
myar[0] = "http://site.com/" + idPartner; 

這條線之後,myar[0] = "http://site.com/undefined"和它無關變量​​沒了。

因此,在改變​​的值後,將影響myar[0]的值。

您需要更改的myar[0]本身的價值。