JavaScript中如何实现类似C++的变量引用?函数内修改外部变量
JavaScript实现类似C++引用传递的累加效果
JavaScript中没有C++那样的原生变量引用传递机制(对于number这类基本数据类型,参数传递是值的副本),但可以通过以下几种方式实现你想要的累加效果:
方法1:用对象包裹基本类型
JavaScript中对象是按引用传递的,将需要修改的变量封装为对象的属性,函数内部直接修改该属性即可影响外部:
let x = { value: 0 }; function addTo(obj, num2) { obj.value += num2; } addTo(x, 5); console.log(x.value); // 控制台输出5
方法2:返回修改后的值并重新赋值
这是最常用的方案,函数返回累加结果,外部变量接收该结果完成更新:
let x = 0; function addTo(num1, num2) { return num1 + num2; } x = addTo(x, 5); console.log(x); // 控制台输出5
方法3:使用闭包封装状态
如果需要持续对同一个变量进行累加操作,可以用闭包封装内部状态,避免暴露全局变量:
function createAdder(initialValue) { let value = initialValue; return { add: function(num) { value += num; }, getValue: function() { return value; } }; } const xAdder = createAdder(0); xAdder.add(5); console.log(xAdder.getValue()); // 控制台输出5
为什么原代码无法生效?
原代码中x是number类型的基本数据,传递给addTo函数时,num1只是x的一个值副本,函数内部修改num1只会改变副本,不会影响外部的x变量。
内容的提问来源于stack exchange,提问作者Charles Masgalas
相关产品推荐
相关产品推荐

