对很多人来说,我的问题可能很容易,但我是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());
所以我认为问题在于阵列。
我希望我的问题足够明确。提前谢谢。
答案 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]);
答案 4 :(得分:0)
你说它的代码不起作用它实际上正在工作,看看工作demo,所以如果它不适合你,你可能在全局范围内没有newValue
变量(即。在你的js文件的根目录而不是在任何其他函数内。)