沃梦达 / IT编程 / 前端开发 / 正文

详细谈谈JS中的内存与变量存储

在JS中,变量都是存储在内存中的。内存是计算机硬件中的一种可读写数据存储器,它用来存储计算机正在运行的程序、运行时所需要的数据以及运行之后产生的结果。在JS中,内存分为堆内存和栈内存两种。

JS中的内存与变量存储

内存的概念

在JS中,变量都是存储在内存中的。内存是计算机硬件中的一种可读写数据存储器,它用来存储计算机正在运行的程序、运行时所需要的数据以及运行之后产生的结果。在JS中,内存分为堆内存和栈内存两种。

栈内存

栈内存是一种连续的内存空间,可以自动分配和释放,其中存储函数的局部变量、函数参数、函数的返回值、对象的引用等。当函数运行结束或变量失效时,栈内存中的数据也会被自动释放。

堆内存

堆内存也称为动态内存,运行时需要手动进行内存分配和释放。JS中的对象、数组等复杂数据类型均存储在堆内存中。

变量的存储

在JS中,变量的存储分为两种情况。

基本数据类型

JS中的基本数据类型包括:数字(number)、字符串(string)、布尔值(boolean)、空(null)、未定义(undefined)。这些基本数据类型的值存在栈内存中。由于基本数据类型的值大小固定,因此在栈内存中开辟一个固定大小的内存区域来存储。

以下是对于一些基本数据类型的值在栈内存中的存储方式:

var str = 'hello world'; // 字符串存储在栈内存中
var num = 100; // 数字存储在栈内存中
var bool = true; // 布尔值存储在栈内存中
var n = null; // null存储在栈内存中
var und = undefined; // undefined存储在栈内存中

复杂数据类型

JS中的复杂数据类型包括:对象(object)和数组(array)。由于它们所占的内存空间大小不固定,因此存储在堆内存中,并且将它们的引用(reference)存储在栈内存中。

下面是对象和数组在JS中的存储:

var arr = [1,2,3]; // 数组存储在堆内存中,arr存储在栈内存中

var obj = {name:'Tom', age:18}; // 对象存储在堆内存中,obj存储在栈内存中

示例说明

var a = {name:'Tom', age:18};
var b = a;

console.log(a); // {name:'Tom', age:18}
console.log(b); // {name:'Tom', age:18}

b.name = 'Lucy';

console.log(a); // {name:'Lucy', age:18}
console.log(b); // {name:'Lucy', age:18}

在这个示例中,变量a和b存储在栈内存中,它们的值都是一个指向同一个对象的引用。对象{ name: 'Tom', age: 18 }存储在堆内存中,当变量b修改对象的属性时,变量a也会受到影响。

function foo(name, age){
    var a = name;
    var b = age;
}

foo('Tom', 18);

在这个示例中,函数foo中的变量a和b存储在栈内存中,当函数foo执行完毕后,栈内存中的a和b也会被释放。

本文标题为:详细谈谈JS中的内存与变量存储