按引用传递
Pass by reference?
本文关键字:按引用传递 更新时间:2023-09-26
谁能告诉我为什么所有 object.num 的打印为 1?这让我发疯。不知何故,在 for 循环之后,无论如何 object.num = 1 的值,即使它们从未设置为 1。请复制整个段进行调试。
<script type="text/javascript">
window.addEventListener("load", main, false);
const n = 4;
function main()
{
var belt = new Array(4*n);
initArr(belt);
printIt(belt);
populateArr(belt);
printIt(belt);
reorder(belt);
printIt(belt);
}
function populateArr(arr)
{
var a = {name:"a", num:0};
var b = {name:"b", num:0};
var end = arr.length;
var i = end-1;
for(var temp = n; temp > 0; temp--)
{
a.num = temp;
arr[i] = a;
i-=2;
}
i = end-2;
for(var temp = n; temp > 0; temp--)
{
b.num = temp;
arr[i] = b;
i-=2;
}
return arr;
}
function printIt(arr)
{
var tempArr = new Array(arr.length);
for(var i=0; i < arr.length; i++)
{
tempArr[i] = arr[i].name + arr[i].num;
}
console.log(tempArr);
}
function initArr(arr)
{
var nothing = {name:null, num:0};
for(var i=0; i<arr.length; i++)
{
arr[i] = nothing;
}
return arr;
}
function reorder(arr)
{
var nothing = {name:null, num:0};
var counter = 0;
var aIndex = 0;
var bIndex = null;
for(var i=0; i < arr.length; i++)
{
if(arr[i].name === "b" && bIndex === null)//first b doesn't get moved
{
bIndex = i+1;
}
else if(arr[i].name === "a")
{
arr[aIndex] = arr[i];
arr[i] = nothing;
counter++;
aIndex++;
}
else if(arr[i].name ==="b")
{
arr[bIndex] = arr[i];
arr[i] = nothing;
counter++;
bIndex++;
}
}
console.log("count: " + counter);
console.log("n: " + n);
return arr;
}
</script>
是不知何故,在 for 循环之后,无论如何 object.num = 1 的值,即使它们从未设置为 1。
的,"他们"是 - "他们"在此循环的最后一次迭代中设置为 1:
for(var temp = n; temp > 0; temp--)
{
a.num = temp;
arr[i] = a;
i-=2;
}
该循环的最后一次迭代是当temp
为 1 时。
现在,您实际上只有一个对象 - 并且您将数组的每个元素都设置为对该对象的引用。这就是为什么数组中的所有值看起来都一样。如果要每次都创建不同的对象,则应使用:
for(var temp = n; temp > 0; temp--)
{
arr[i] = { name: "a", num: temp };
i -= 2;
}
相关文章:
- 通过引用传递JavaScript对象
- 如何正确引用传递到淘汰中的当前元素的属性.JS
- 我们可以在JavaScript函数中通过引用传递变量吗
- 在函数中按值传递对象
- 在javascript/angular中创建播放列表(按值复制数组,但按引用设置嵌套对象)
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- Javascript :按值传递字符串
- 节点.js V8 通过引用传递
- 如何在 JavaScript 中通过引用传递变量
- 将函数引用传递给嵌套闭包
- Javascript-通过引用传递变量问题
- Javascript'添加到数组中的s对象是通过值或引用传递的
- 为什么这个数组是通过引用而不是按值传递的,我该如何改变它
- 按引用传递
- 将字符串传递给函数是按值复制还是按引用传递
- 是JavaScript按引用传递或按值传递
- 变量赋值 - Javascript: array1[0] = array2[0];这是按值传递还是按引用传递
- 我想按值传递数组,但似乎它是通过引用传递的,数组上的 .map 操作没有给出预期的结果
- 将按引用调用作为按值调用传递