close

在js中 當assign value或object給一個變數時

myVar = x

如上把x assign給變數myVar

如果x是primitive type像是數字1,2,3,... 或是字串'abc'

則myVar是得到value的拷貝

所以如果改變x的值, myVar不會受到影響

如 

var x = 1; // x:1

var myVar = x //myVar 1

x=2 //x: 2

log(myVar) //myVar: 1

因為myVar是取得拷貝的值 所以x改變 myVar不受影響

 

而如果今天y是個object

var y = { val: 3 } // y.val: 3

var theVal = y // theVal.val:3

y.val = 4 // y.val:4

log(theVal) //{ val: 4 }

此時由於y是個object, 所以theVal取得的會是y在記憶體中的參考位置

當y的內容被改變時 就是變記憶體中的值 所以theVal也就跟著改變

但承上如果assign一個新的object給y呢?

y = { val: 5 } // y.val: 5

log(theVal) // { val: 4}

因為y被assign的是一個新的記憶體位址 所以y會得到新的值

但theVal依然是存取舊的記憶體位址 所以不會變為5

arrow
arrow
    創作者介紹
    創作者 jojomango 的頭像
    jojomango

    jojo的各種心得

    jojomango 發表在 痞客邦 留言(0) 人氣()