1 基本类型和引用类型的值

ES有两种不同的数据类型:基本类型值引用类型值

2 基本类型:

定义:

基本类型指的是简单的数据段。
基本数据类型:undefined、null、Boolean、Number、string五种。
变量作用域和内存问题 - 图1

检测类型typeof:

变量作用域和内存问题 - 图2
变量作用域和内存问题 - 图3

3 引用类型:

定义:

引用类型指的那些可能有多个值构成的对象。
变量作用域和内存问题 - 图4
变量作用域和内存问题 - 图5

检测类型instanceof

变量作用域和内存问题 - 图6

4 传递参数:

ES中所有函数的参数都是按值传递的。
变量作用域和内存问题 - 图7
变量作用域和内存问题 - 图8

5 执行环境及作用域

6 执行环境:

变量作用域和内存问题 - 图9

7 全局作用域和局部作用域

全局作用域

全局执行环境是最外围的一个执行环境。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退出——例如关闭网页或浏览器——时才会被销毁)。

局部作用域

函数内部为局部作用域。函数运行结束,内部声明的变量销毁。

8 延长作用域链

用return来延长作用域链。
变量作用域和内存问题 - 图10
变量作用域和内存问题 - 图11

9 没有块级作用域

变量作用域和内存问题 - 图12

ES6新增了块级作用域的声明let

变量作用域和内存问题 - 图13
for循环的计数器,就很合适使用let命令。

10 垃圾收集

垃圾收集有两种:标记清除和引用计数。计时执行的。

11 标记清除:

变量作用域和内存问题 - 图14
变量作用域和内存问题 - 图15

12 引用计数:

对象循环引用时,计数无法清除。解决办法:对象结尾手动清除:obj = null;
不会立即内存中删除,而是会在下次计时垃圾收集是清除。避免了计数无法归零清除的弊端。
变量作用域和内存问题 - 图16