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中的内存与变量存储 - Python技术站