存放在栈内存中,简单来讲就是简单的变量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