[英]Passing Global Variable to Function - Global Variable Not Updating After Function Run
我的代碼將數字遞增或遞減1。問題是“ testNum”,這是一個全局變量,應反映遞增或遞減的增量,但是當我在控制台中檢查“ testNum”的值時,它始終為20。我通過了“ testNum” ”並返回它。 為什么它不反映增量?
小提琴: http : //jsfiddle.net/FnUXw/1/
<input type="button" id="btnDown" value="-">
<span id="amountDiv">amount div</span>
<input type="button" id="btnUp" value="+">
<script>
var testNum = 20;
amountDiv.innerHTML = testNum;
function makeButtonIncrement(button, upDown, displayDiv, variable) {
function changeValue () {
if (upDown == "up") {
variable++;
}
if (upDown == "down") {
variable--;
}
displayDiv.innerHTML = variable;
}
button.onclick = changeValue;
return variable;
}
makeButtonIncrement(document.getElementById('btnDown'), "down", document.getElementById('amountDiv'), testNum);
makeButtonIncrement(document.getElementById('btnUp'), "up", document.getElementById('amountDiv'), testNum);
</script>
數字是通過值傳遞的,而不是作為參考傳遞的,因此您可以執行自己想做的事情。 按照代碼的原樣進行結構化之后,您需要在分配返回值的過程中執行以下操作:
testNum = makeButtonIncrement(document.getElementById('btnDown'), "down", document.getElementById('amountDiv'), testNum);
只有數組和對象是通過引用傳遞的,因此它們可以作為參數傳遞,並且可以讓函數修改原始變量。 其他類型按值傳遞(例如,為參數創建副本),因此您無法修改原始類型。
修改原始文件的方法是將其作為對象的屬性傳遞。 然后,由於該對象是通過引用傳遞的,因此該函數可以修改原始屬性值。
或者,由於您已經在使用全局變量,因此可以直接修改全局變量,甚至不將其作為參數傳遞。 它是作為參數傳遞的副本,因此您無法修改原始參數。 通常不建議使用全局變量,但是如果由於其他原因它已經是全局變量,則可以直接在函數中對其進行修改,而無需將其作為參數傳遞。
您正在使用“ variable ++”和“ variable--”,它們正在遞增或遞減該局部范圍的變量(局部於函數范圍)。 該參數不是指向全局變量的指針,而是通過值(而不是通過引用)傳遞。
最簡單的修改是將variable++
和variable--
分別更改為testNum++
和testNum--
並刪除該最終函數參數,因為這是不必要的。
function makeButtonIncrement(button, upDown, displayDiv) {
function changeValue () {
if (upDown == "up") {
testNum++;
}
if (upDown == "down") {
testNum--;
}
displayDiv.innerHTML = testNum;
}
button.onclick = changeValue;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.