1

我的问题对很多人来说可能很容易,但我是 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());

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

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

4

5 回答 5

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());
于 2012-11-28T17:01:46.140 回答
0

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

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

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

于 2012-11-28T16:58:21.830 回答
0

您提供的代码的行为符合您的预期,而不是您报告的行为。这是一个演示的jsfiddle

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

于 2012-11-28T16:59:46.523 回答
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/

于 2012-11-28T17:00:20.270 回答
0

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

于 2012-11-28T17:00:37.077 回答