首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否按引用传递?

是否按引用传递?
EN

Stack Overflow用户
提问于 2014-11-15 16:58:20
回答 1查看 68关注 0票数 2

谁能告诉我为什么所有的object.num都打印为1?这快把我逼疯了。无论如何,在for循环之后,object.num的值= 1,即使它们从未设置为1。请将整个段复制到调试。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2014-11-15 17:05:36

无论如何,在

循环之后,object.num的值= 1,即使它们从未被设置为1。

是的,"they“是-”they“在这个循环的最后一次迭代中设置为1:

代码语言:javascript
复制
for(var temp = n; temp > 0; temp--)
{
    a.num = temp;
    arr[i] = a;
    i-=2;
}

temp为1时,该循环的最后一次迭代。

现在,您实际上只有一个对象-并且将数组的每个元素都设置为对该对象的引用。这就是为什么数组中的所有值看起来都是一样的。如果每次都要创建不同的对象,则应使用:

代码语言:javascript
复制
for(var temp = n; temp > 0; temp--)
{
    arr[i] = { name: "a", num: temp };
    i -= 2;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26944233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档