JavaScript 变量、作用域和内存机制详解

0 下载量 78 浏览量 更新于2024-08-28 收藏 90KB PDF 举报
JavaScript 变量、作用域及内存 一、变量和作用域 在 JavaScript 中,变量是松散型的,不强制类型,这意味着变量的值及其数据类型可以在脚本的生命周期内改变。JavaScript 变量是用于保存特定值的一个名字,而不是必须保存特定数据类型值的容器。 二、基本类型和引用类型 JavaScript 变量包含两种不同的数据类型的值:基本类型值和引用类型值。 1. 基本类型值 基本类型值是保存在栈内存中的简单数据段,例如 Undefined、Null、Boolean、Number、String 等。这些类型在内存中占有固定大小的空间,它们的值保存在栈空间,我们按值来访问。 2. 引用类型值 引用类型值是保存在堆内存中的对象(可能由多个值构成),即变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。引用类型的值的大小不固定,因此不能保存在栈内存,必须保存在堆内存中;但可以将引用类型的值的内存地址保存在栈内存中。当查询引用类型的变量时,先从栈内存中读取内存地址,然后通过地址找到堆内存中的值。 三、动态属性 定义基本类型值和引用类型值的方式相似:创建一个变量并为该变量赋值。但当这个值保存到变量中以后,对不同类型值可以执行的操作则不一样。 四、复制变量值 在变量复制方面,基本类型和引用类型也有所不同。 1. 基本类型赋值 基本类型赋值的是值本身。例如: ```javascript var box = 'lee'; // 在栈内存中生成一个box 'lee'; var box2 = box; // 在栈内存中再生成一个box2 'lee'; ``` box 和 box2 完全独立;两个变量分别操作时互不影响。 2. 引用类型赋值 引用类型赋值的是地址。例如: ```javascript var box = new Object(); // 创建一个引用类型;box 在栈内存中,而 Object 在堆内存中; box.name = 'lee'; // 新增一个属性; var box2 = box; // 把引用地址赋值给 box2; ``` box 和 box2 共享同一个对象引用,两个变量操作时会相互影响。 JavaScript 变量、作用域及内存是一个复杂的主题,需要深入理解基本类型和引用类型的区别, 以及它们在内存中的存储和访问方式。