数组中的Javascript全局变量

时间:2012-11-28 16:55:21

标签: 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]);

在上面的代码中,控制台中显示的结果是: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());

所以我认为问题在于阵列。

我希望我的问题足够明确。提前谢谢。

5 个答案:

答案 0 :(得分:2)

更好的方法是使用闭包来屏蔽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());

答案 1 :(得分:0)

您可以像这样实现“一种静态”变量:

function getCurrentAmount() {
    var f = arguments.callee, newValue = f.staticVar || 0;
    newValue++;
    f.staticVar = newValue;
    return [newValue,2,3];
}

这应该比全局变量方法更好。

答案 2 :(得分:0)

您提供的代码与您预期的一样,而不是您报告的代码。这是演示的jsfiddle

您必须在与您在问题中显示的内容不同的背景下设置newValue

答案 3 :(得分:0)

此代码适用于我:

var newValue = 1;
function getCurrentAmount() {

return [newValue,2,3];
}
var result = getCurrentAmount();
console.log(result[0] + "" + result[1] + result[2]);

看看这里: http://jsfiddle.net/PAfRA/

答案 4 :(得分:0)

你说它的代码不起作用它实际上正在工作,看看工作demo,所以如果它不适合你,你可能在全局范围内没有newValue变量(即。在你的js文件的根目录而不是在任何其他函数内。)