我的问题对很多人来说可能很容易,但我是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 文件的根目录而不是在任何其他函数中)。