栈和堆
javaScript的内存空间中的堆(stack)和栈(heap)
栈:用来存储执行上下文,以及一些原始类型的小数据(如undefined、null、boolean、number、string、symbol)
堆:用来存储大数据如引用类型(Object、Array、Function等),然后把它们的引用地址保存到栈空间的变量中。
按值传递和按引用传递
复制一个变量时,如果复制的是基本类型的数据,是按值传递。如果复制的是引用类型的数据,是按引用传递
按值传递
function foo(){
var num1 = 10;
var num2 = num1;
num2 = 20;
console.log(num2) // 20
console.log(num1) // 10
}
foo()
按引用传递
// 复制引用类型的变量, 按引用传递
var obj1 = { a: 1};
var obj2 = obj1;
obj2.a = 2;
console.log(obj2.a) // 2
console.log(obj1.a) // 2,
// obj1.a也变成2,因为obj1和obj2的内存地址引用了堆内存空间中的同一个对象