存放在棧內存中,簡單來講就是簡單的變量a的值等於xxx
bash
舉個栗子:
ui
var a = 11 //a就是一個值類型,它存儲在棧內存中,直接存儲着變量值和名字
複製代碼
就比較複雜一點了,它會在堆內存中開闢一個空間,存儲具體的值,而在棧內存中存儲的是指向該值得地址
spa
舉個栗子`code
//obj就是一個引用類型,它的引用地址存儲在棧內存中,堆內存中存儲着實際的值
var obj = {
name:'cesium',
type:'3D'
}
複製代碼
來思考一下:
cdn
var a = 11
var b,d
b = a
var c = {
name:'cesium',
type:'3D'
}
d = c
d.name = 'openlayer'
//a,b,c,d分別打印什麼呢?
console.log(a)
console.log(b)
console.log(c)
console.log(d)
複製代碼
結果以下:
對象
能夠看到a的值賦給b後再改變b的值,b變爲了12,而a依然是11,c的值賦給d,d改變了name,c也跟着變了,這是爲何呢,咱們來看圖
blog
那麼咱們怎麼解決這個問題呢
使用object.assign()來從新分配對象就好
內存
// 被引用的對象
var c = {
name:'cesium',
type:'3D'
}
// 新的對象從舊的對象賦值
d = Object.assign({},c)
// 只改變新對象的值
d.name = 'openlayer'
console.log("打印c")
console.log(c)
console.log("-------------")
console.log("打印d")
console.log(d)
複製代碼
這樣d就不會影響到原值了string