在JS中栈内存和堆内存分别存储什么数据?

54 阅读2分钟

"在JS中,栈内存和堆内存分别存储不同类型的数据。

在栈内存中,存储的是基本数据类型的值,例如数字、布尔值、字符串和 undefined。这些值被直接存储在栈内存中,并且可以直接访问和操作。当我们声明一个变量并赋予一个基本数据类型的值时,它会被存储在栈内存中。

let num = 10; // 数字类型存储在栈内存中
let bool = true; // 布尔类型存储在栈内存中
let str = \"Hello\"; // 字符串类型存储在栈内存中
let undef; // undefined类型存储在栈内存中

而在堆内存中,存储的是引用数据类型的值,例如对象和数组。引用数据类型的值是通过引用存储在堆内存中的,而不是直接存储在变量中。当我们声明一个对象或数组时,变量实际上存储的是指向堆内存中对象或数组的引用。

let obj = { name: \"John\", age: 25 }; // 对象存储在堆内存中,obj存储的是指向堆内存的引用
let arr = [1, 2, 3]; // 数组存储在堆内存中,arr存储的是指向堆内存的引用

当我们操作引用数据类型时,实际上是通过引用来操作堆内存中的值。

此外,函数也存储在堆内存中。当我们声明一个函数时,函数的定义被存储在堆内存中,而函数的引用会存储在栈内存中。

function sayHello() {
  console.log(\"Hello\");
}

let greet = sayHello; // 函数的引用存储在栈内存中

通过了解栈内存和堆内存的区别,我们可以更好地理解数据在JS中的存储方式,从而更有效地进行内存管理和数据操作。"