Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组中的Javascript全局变量_Javascript_Arrays_Global Variables - Fatal编程技术网

数组中的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 为什么

我的问题对很多人来说可能很简单,但我对Javascript还是新手。我真的不知道下面的代码有什么问题

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
的依赖是非常隐含的。最好使用闭包。我的问题是由混乱引起的,有人在上面评论过。然而,这里没有任何答案指出这一点。我会接受你的答案作为解决办法,因为你教了我另一个我不知道的好方法。谢谢你的回答。