javaScript内存机制

66 阅读1分钟

栈和堆

javaScript的内存空间中的堆(stack)和栈(heap)

栈:用来存储执行上下文,以及一些原始类型的小数据(如undefined、null、boolean、number、string、symbol)

image.png

堆:用来存储大数据如引用类型(Object、Array、Function等),然后把它们的引用地址保存到栈空间的变量中。

image.png

按值传递和按引用传递

复制一个变量时,如果复制的是基本类型的数据,是按值传递。如果复制的是引用类型的数据,是按引用传递

按值传递

function foo(){ 
   var num1 = 10; 
   var num2 = num1; 
   num2 = 20; 
   console.log(num2) // 20 
   console.log(num1) // 10
}
foo()

image.png

按引用传递

// 复制引用类型的变量, 按引用传递
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的内存地址引用了堆内存空间中的同一个对象

image.png

转载来源:blog.csdn.net/sonicwater/…