美文网首页
借助堆栈理解JS中的数组赋值问题

借助堆栈理解JS中的数组赋值问题

作者: 哪树繁花 | 来源:发表于2017-09-12 20:59 被阅读29次

    首先先看问题

    var a = 3;
    var b = a;
    b = 10;
    alert(a+","+b);
    

    答案很明显:3,10 。

    var arr = [1,2,3];
    var brr = arr;
    brr[0] = 5;
    alert(arr);
    alert(brr);
    

    两次的结果都是5,2,3 。
    出现这种情况的原因是:在定义变量的时候,栈内存里只能存放简单数据类型,比如数字,字符之类,所以定义a = 3的时候在栈里开辟出一块空间存放a,定义b=a的时候开辟另一块空间存放b,他俩的值是一样的;但当定义的变量是数组时,由于数组里元素数不固定,整个数组属于复杂数据类型,而复杂数据类型只能放到堆内存里,我们定义的数组arr在栈内存储存的是一个十六进制得地址,这个地址是指向存放数组内容的堆内存的,这时再去定义数组brr = arr时,是把栈里的地址值赋值给了brr,arr和brr是指向同一块堆内存的,所以对arr和brr中的任何一个操作,都会影响另一个。


    相关文章

      网友评论

          本文标题:借助堆栈理解JS中的数组赋值问题

          本文链接:https://www.haomeiwen.com/subject/qelhsxtx.html