JavaScript变量引用问题
今天上班的时候,遇到一个参数传递的问题,众所周知JavaScript的变量是没有类型定义的,那么每一个变量实际上都是一个指向变量值的指针,都仅仅只是对栈或堆中存放变量的引用,而遇到的问题大致如下:
let nNum = Math.random()
let arrNew1 = [1, 2, 3, 4];
let arrNew2 = [5, 6, 7, 8]
let arrTarget = null;
function funReferenceArray(arrA, arrB, arrC, nNum) {
if (nNum > 0.5) {
arrA = arrB
} else {
arrA = arrC
}
arrA = [1, 2]
}
funChangeTarget(arrTarget, arrNew, arrNew2); // 运行完成后,arrNew1或arrNew2依旧是[1, 2, 3, 4]
这就导致到实现与需求出现了冲突,需求是需要多重引用,但是Js的特性导致这一点不能像C++的指针一样实现
解决办法
一个不完善的解决办法,就是直接修改变量所指向的堆栈
let nNum = Math.random()
let arrNew1 = [1, 2, 3, 4];
let arrNew2 = [5, 6, 7, 8];
let arrTarget = null;
function funReferenceArray(arrA, arrB, arrC, nNum) {
if (nNum > 0.5) {
arrA = arrB;
} else {
arrA = arrC;
}
arrA.length = 0; // 清空堆栈中数组
arrA.push(...[1,2])
}
funChangeTarget(arrTarget, arrNew, arrNew2); // 运行完成后,arrTarget与被选中的arrNew均会被修改为[1,2]
这只是我用js的一点小理解,感觉没有C++的指针那么好用,各位大佬如果有更好的解决办法可以一起讨论一下
|