2011-10-27 207 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]本身的价值。