Javascript中的全局变量

时间:2011-10-27 18:18:28

标签: javascript jquery

这让我烦恼。

我在doc的开头设置一个数组:

 var idPartner;

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

我在地址上得到一个数字,这是合作伙伴的身份。大。但我试图设置它没有成功:

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

确定。警报它给了我正确的号码,但没有设置它。

怎么了?

谢谢!

4 个答案:

答案 0 :(得分:4)

更改变量的值不会重新设置数组中的值。这只是javascript无法自动完成的事情。您必须重新生成数组才能获得新ID。您可以将id添加到使用数组的值,而不是预先设置包含id的数组中的值吗?

编辑:例如,你会这样做:

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

当你需要使用数组中的值时,你会这样做:

var theVal = myArray[0] + myId;

答案 1 :(得分:1)

试试这个:

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


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

然后使用myvar.join(),您需要完整的网址。

答案 2 :(得分:0)

这里的问题是在

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

..执行字符串连接,这意味着您将复制结果字符串复制到索引位置0的数组中。

因此,稍后设置idPartner时,它不会对以前复制的字符串产生任何影响。为了避免这种影响,您可以在idPartner变量更新时再次构造字符串,或者创建一个对象,并在需要时对其进行评估...

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();

现在显然这取决于你情况的复杂程度。也许建议的数组解决方案可能也可以工作,虽然我更喜欢将它封装在对象的某个地方以获得更好的可重用性。

答案 3 :(得分:0)

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

在此行之后myar[0] = "http://site.com/undefined",它与变量idPartner无关。

因此,更改idPartner的值后会影响myar[0]的值。

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