在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js變量指向的問題

js變量指向的問題

var a = [1,2];
var b = [1,2,a];
a=[3];
打印b //[1,2,[1,2]]
第一個問題:b為什么沒有變?

var a = [1,2];
var b = [1,2,a];
a[0]=3;
打印b //[1,2,[3,2]]
第二個問題:b為什么變了?

誠問;麻煩說的通俗易懂些

回答
編輯回答
熟稔

a*=[]
b*=[&a]
&a[0]=222
a*=[1]
a*賦值不會更改&a
給把數(shù)組的指針賦值給變量不會影響變量原有數(shù)據(jù)

2017年8月22日 00:39
編輯回答
傻叼

你搞清楚傳值和傳引用的問題就可以了,數(shù)組是對象,傳的是引用。

第一個問題:
首先var a = [1,2];中的數(shù)組[1,2]已經(jīng)在內存中了,
a得到它的引用地址,此時b再引用a,
相當于得到[1,2]的地址放到b[3]的位置,
之后再把數(shù)組[3]的引用地址傳給a,此時只是數(shù)組[3]的地址傳給a,并不會改變原來數(shù)組[1,2]的值

第二個問題:
明白數(shù)字時常量,傳的是值,數(shù)組是對象,傳的是引用 第二問題就解決了
[1,2,a]中的a是數(shù)組,獲得的是數(shù)組[1,2]的引用,
此時賦值 a[0]=3;相當于把數(shù)組[1,2]的第一個元素賦值為3,是傳值,相當于更改對象的值
而[1,2,a]中的a僅僅是獲得[1,2]的引用地址,引用地址里的值改變了,所以[1,2,a]也跟著改變了

2017年4月3日 06:06
編輯回答
伐木累

我的理解如下,求大神解釋更底層的原理~

        {
            let a = [1,2]; //a的內存指向[1,2]
            let b = [1,2,a]; // b的內存指向[1,2,[1,2]]
            a = [3]; //改變內存指向 指向[3]
            console.log(b);//現(xiàn)在的b還在第二行代碼這里啊
        }

        {
            let a = [1,2];
            let b = [1,2,a];
            a[0] = 3; //改變內存中的內容 簡而言之 就是賦值操作 
            console.log(b);
        }
2017年3月18日 01:24
編輯回答
不二心

首先,數(shù)組是引用類型的值,意思就是數(shù)組名是指向內存地址的一個指針。

所以a是數(shù)組的一個指針,a重新賦值是改變了a的指向,b也是一個指針對吧,它指向的就是[1, 2, // a指向的那個數(shù)組,即[1, 2]]

a只是更改了指向,沒有更改原來那個指向的內容。

但是a[0]就不一樣了,它是修改了內存地址的內容。

手機打的…可能體驗比較差,但是有問題可以繼續(xù)問我~

2017年9月30日 13:03