数组中的Javascript全局变量
我的问题对很多人来说可能很简单,但我对Javascript还是新手。我真的不知道下面的代码有什么问题数组中的Javascript全局变量,javascript,arrays,global-variables,Javascript,Arrays,Global Variables,我的问题对很多人来说可能很简单,但我对Javascript还是新手。我真的不知道下面的代码有什么问题 var newValue = 1; function getCurrentAmount() { return [newValue,2,3]; } var result = getCurrentAmount(); console.log(result[0] + "" + result[1] + result[2]); 在上面的代码中,console中显示的结果是:undefined23 为什么
var newValue = 1;
function getCurrentAmount() {
return [newValue,2,3];
}
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);
在上面的代码中,console中显示的结果是:undefined23
为什么结果不是“123”?我试图使用全局变量,因为每次调用函数时,我都希望将newValue增加1。
我想要像下面这样的东西:
var newValue = 1;
function getCurrentAmount() {
newValue ++;
return [newValue,2,3];
}
setInterval(function(){
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);
}, 1000);
此外,我只是厌倦了下面的代码,它的工作如预期
var newValue =1;
function test() {
newValue ++;
return newValue;
}
console.log(test());
所以我认为问题在于阵列
我希望我的问题足够清楚。提前感谢。您可以实现一个“排序静态”变量,如下所示:
function getCurrentAmount() {
var f = arguments.callee, newValue = f.staticVar || 0;
newValue++;
f.staticVar = newValue;
return [newValue,2,3];
}
这应该比全局变量方法更有效。您给出的代码的行为与您预期的一样,而不是与您报告的一样。下面是一个例子
您必须在与您在问题中显示的内容不同的上下文中设置
newValue
。此代码适用于我:
var newValue = 1;
function getCurrentAmount() {
return [newValue,2,3];
}
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);
请看这里:
您所说的代码不起作用,它实际上在起作用,请参阅“工作”,因此,如果它对您不起作用,您可能在全局范围内没有
newValue
变量(即,在js文件的根目录下,而不是在任何其他函数中).更好的方法是使用闭包将newValue
从全局范围屏蔽。像这样:
var getCurrentAmount = (function () {
var newValue = 1; // newValue is defined here, hidden from the global scope
return function() { // note: return an (anonymous) function
newValue ++;
return [newValue,2,3];
};
)()); // execute the outer function
console.log(getCurrentAmount());
我得到了
123
。您是否有其他可能会造成干扰的代码?顺便说一句,这是使用“globals”的正确方法。我在chrome上也得到了123。代码的顺序和你的例子一样吗?有时当代码顺序错误,或者没有考虑onLoad或DOMReady事件时,就会发生这种情况。我刚刚发现了问题。Jav Rok也发现了我的问题。我没有得到我所期望的,因为顺序不对。我是一名Java程序员。JAVA不关心顺序,但Javascript关心顺序。将var newValue=1放在一开始就解决了我的问题。谢谢大家的帮助。这是可行的,但是对callee.staticVar
的依赖是非常隐含的。最好使用闭包。我的问题是由混乱引起的,有人在上面评论过。然而,这里没有任何答案指出这一点。我会接受你的答案作为解决办法,因为你教了我另一个我不知道的好方法。谢谢你的回答。