数组中的 JavaScript 全局变量



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

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

在上面的代码中,控制台中显示的结果为:未定义23为什么结果不是"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());

所以我认为问题出在数组上。

我希望我的问题足够清楚。提前谢谢。

更好的方法是通过使用闭包来保护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());

你可以实现一个"静态"变量,如下所示:

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

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

您给出的代码的行为符合您的预期,而不是您报告的那样。 这是一个演示的jsfiddle。

您必须在与问题中显示的上下文不同的上下文中设置newValue

这段代码对我有用:

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

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

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

相关内容

  • 没有找到相关文章

最新更新