gpt4 book ai didi

javascript - 将全局变量传递给函数 - 函数运行后全局变量不更新

转载 作者:行者123 更新时间:2023-11-28 20:37:45 26 4
gpt4 key购买 nike

我的代码将数字向上或向下递增 1。问题是“testNum”,它是一个全局变量,应该反射(reflect)向上或向下的增量,但是当我在控制台中检查“testNum”的值时,它始终是 20。我将“testNum”传递给我的函数并返回它。为什么它不反射(reflect)增量?

fiddle :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);

只有数组和对象通过引用传递,因此它们可以作为参数传递并让函数修改原始变量。其他类型按值传递(例如,为参数创建副本),因此您无法修改原始类型。

修改原始文件的解决方法是将其作为对象的属性传递。然后,由于对象是通过引用传递的,因此该函数可以修改原始属性值。

<小时/>

或者,由于您已经在使用全局变量,因此您可以直接修改全局变量,甚至不将其作为参数传递。它是作为参数传递的,它会生成它的副本,因此您无法修改原始文件。一般来说,不建议使用全局变量,但如果由于其他原因它已经是全局变量,您可以直接在函数中修改它,而无需将其作为参数传递。

关于javascript - 将全局变量传递给函数 - 函数运行后全局变量不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15045728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com