JS变量、作用域和内存问题

一、基本类型和引用类型

1. 基本类型值指的是简单的数据段,引用类型值指那些可能由多个值组成的对象。

2. 基本类型值按值访问,引用类型值按引用访问:

按值访问对于基本类型而言,不同变量指向的地址空间都是不同的,即使把一个变量赋值给另一个变量,接收到时变量指向的内容而不是内存地址;
按引用访问对于对象类型而言,不同的变量指向的地址空间可能是相同的,当一个变量赋值给另一个变量时,接收到的变量的地址,而不是内容;

二、执行环境与作用域

1. 执行环境定义了变量或函数有权访问的其他数据。

2. 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

3. 各个执行环境之间可能是父子关系或者并列关系,子执行环境有权访问父执行环境,反之则不行,同级执行环境也无权互相访问。

4. with语句可将其参数对象对应的执行环境的访问权限添加到当前一级环境中。

5. 没有块级作用域,一个对象对应一个执行环境。

三、垃圾收集

1. JavaScript具有自动垃圾收集机制。通常由两个策略:标记清除(给当前不使用的值加上标记,然后再回收其内存)、引用计数(跟踪记录所有值被引用的次数)

2. 通过将值设置为null来释放内存——解除引用

原文地址:https://www.cnblogs.com/wangxinwen/p/9519451.html