JavaScript 变量、作用域和内存机制详解
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 变量、作用域及内存是一个复杂的主题,需要深入理解基本类型和引用类型的区别, 以及它们在内存中的存储和访问方式。
286 浏览量
243 浏览量
104 浏览量
103 浏览量
2023-03-31 上传
282 浏览量
251 浏览量
178 浏览量
113 浏览量
weixin_38547035
- 粉丝: 3
- 资源: 920
最新资源
- CSS3遮罩滑动条文字动画特效特效代码
- Mockkator:Mockkator是一个Intellij插件,可用于自动生成Mockk的样板代码
- minDistanceInGraph:最短路径的两个算法:迪杰斯特拉算法和佛洛依德算法
- Osiris:Github API使用者和卡车因子指标提取器
- SVG绘制火焰文字动画特效特效代码
- 第三篇:跨平台QT开发-打包
- 基于SVD分解的PCA降维图像重建MATLAB仿真+仿真操作录像
- shopping.zip
- Swin-Transformer:这是“变形金刚”的官方实现
- mongodb:记录日常写的相关mongo的代码和总结的笔记
- nodetransactionrouting:这是聊天应用程序,进行交易路由
- libevent-2.0.12-stable.tar.gz
- githubr:从R到GitHub的接口
- jQuery基于CSS3加载文字动画特效代码
- Craps-Luk-Pepa:“废话不多”的真实资料库(2020.1)
- Icon Changer-crx插件