基本类型
number,string都是基本数据类型,而基本类型存放在栈区,访问时按值访问,赋值时按照普通方式赋值,当基本类型赋值的时候,赋的是实际的值,a和b是没有关联的b由a赋值得到,相互独立。
var a = 10;
var b = a
b=2
console.log(a) //10
console.log(b) //2
引用类型
对象和数组是通过引用来赋值的,引用类型指的是对象,可以拥有属性和方法,并且我们可以修改属性和方法。引用对象存储的方式是:在栈中存放对象变量标识名称和该对象在堆中存放的地址,在堆中存放的数据。
对象使用的是引用赋值。当我们把对象赋值给一个新的变量时,赋的其实是该对象在堆中的地址,而不是堆中的数据,也就是两个对象指向的是一个存储空间,无论哪个对象发生变化,另一个也会随之改变,两个对象是联动的
var arr = [1,2]
var new_arr = arr
new_arr[0] = 5
console.log(arr) //[2,5]
console.log(new_arr) //[2,5]
对此对象调用
对象调用函数this的指向对象,this.a就等于2如果多次调用,对象属性引用链只有上一层或者说是最后一层在调用位置中起作用。
function fn(){
console.log(this.a)
}
var obj = {
a:2,
foo:fn
}
var obj1 = {
a:1,
obj:obj
}
obj1.obj.fn() //2