为什么我不能在一个函数内连续增加一个变量?
问题描述:
我试图每次调用d
时都重复添加10次。它每次保持20次,为什么?为什么我不能在一个函数内连续增加一个变量?
function d() {
var c = [10];
c[0] += 10;
alert(c[0]); // always 20
}
d(); d(); d(); // supposed to be 20, 30, 40...
答
您每次调用该函数时都会创建一个新数组并将其分配给c
。重置它。
移动赋值使其位于函数之外(所以它只运行一次)。
var c = [10];
function d() {
c[0] += 10;
alert(c[0]);
}
d(); d(); d(); // will be 20, 30, 40...
但全局是错误的良好来源,因此它被认为是良好的作风来包装这样的事情在关闭的使用全局变量的减少。
var d =(function() {
var c = [10];
function d() {
c[0] += 10;
alert(c[0]);
};
return d;
})();
d(); d(); d();
+1
昆汀 - 你可以输入非常快! –
答
你有什么是局部变量。每次调用该函数时,它都被初始化为10。
尝试使用全局变量作为
var c = [10];
function d() { c[0] += 10; alert(c[0]); // always 20 }
答
为什么不
var c = 10;
function d(){
c+=10;
alert(c);
}
d();d();d();
答
@Quentin already explained the reason for your problem and provided a solution。有关变量范围的更多信息,请查看MDN JavaScript Guide。
作为替代方案,可以将值分配给该功能的一个属性:
function d() {
var c = d.c || (d.c = [0]); // initialize property if not set
c[0] += 10;
alert(c[0]);
}
阅读有关[可变范围(https://developer.mozilla.org/en/JavaScript/Guide/Values %2c_Variables%2c_and_Literals#Variable_Scope)。 –