重学JS-第四章变量作用域和内存

100 阅读1分钟

1基本类型和引用类型

基本类型:null,undefined,string,number,Boolean

基本类型:简单的数据段

引用类型:可能由多个值组成的对象

不能给基本类型添加属性,这是无效的。只能给引用类型动态添加属性

复制变量值

基本类型直接给变量对象创建新值

引用类型依靠的是指针

传递参数

JS中所有函数的参数,都是按值传递的

检测类型

typeof

typeof variable

instanceof

variable instanceof constructor

2执行环境作用域

浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。Node 里面,顶层对象是global,但其他环境都不支持。

延长作用域链

try-catch

with

块级作用域

严格模式下,初始化未声明的变量会报错

3垃圾收集

标记清除

引用计数:可能有循环引用

IE9之前的IE,DOM对象是使用C++以COM(组件对象模型)实现的,C++是采用引用计数的;对于原生JS是采用标记清除的。

循环引用的存在,哪怕DOM已经从页面上移除,还会占用内存

为了避免循环引用,最好使用之后,手动断开他们的连接

解除引用:当数据不再使用,通过将其设置为null释放其引用

解除引用的目的是让值脱离执行环境,方便垃圾收集器下次运行回收