我試圖每次調用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...
我試圖每次調用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();
昆汀 - 你可以輸入非常快! –
你有什麼是局部變量。每次調用該函數時,它都被初始化爲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)。 –