我试图在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...
答案 0 :(得分:13)
每次调用函数时,都会创建一个新数组并将其分配给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 :(得分:1)
@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]);
}
答案 2 :(得分:0)
你拥有的是局部变量。每次调用函数时,都会初始化为10。
尝试将全局变量用作
var c = [10];
function d() { c[0] += 10; alert(c[0]); // always 20 }
答案 3 :(得分:0)
为什么不
var c = 10;
function d(){
c+=10;
alert(c);
}
d();d();d();