javaScript之 变量、作用域和内存问题

《javaScript高级程序设计》第四章  读书笔记

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

  1. 基本类型值 包括:Undefined、Null、Boolean、Number 和 String。

  引用类型值 指那些可能由多个值构成的对象。【注意:字符串不是引用类型的】

  1. 基本类型 在内存中占据固定大小的空间,因此被保存在栈内存中。

  引用类型 的值是对象,保存在堆内存中。

  【对象的访问地址在栈内存中存放,但该对象的值由堆内存来分配空间】

  【由于对象的值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址大小保存在栈内存中。】

  1. 从一个变量到另一个变量复制 引用类型 的值,复制的其实是指针,因此两个变量最终都指向同一个对象。

  2. 确定一个值是哪种基本类型可以用 typeof 操作符,而确定一个值是哪种引用类型可以使用 instanceof 操作符。

5. ECMAScript中所有函数的参数都是 按值传递的。

 

相关文章:JavaScript变量——栈内存or堆内存(http://www.tuicool.com/articles/m2queq)


4.2  执行环境 及 作用域

  1. 执行环境 有 全局执行环境(全局环境) 和 函数执行环境 之分。

  2. 每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链。

  3. 变量的执行环境有助于确定应该何时释放内存。

  4. 在严格模式下,初始化未经声明的变量会导致错误。

  5. 执行环境决定了变量的生命周期。


4.3  垃圾收集

  1. JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。

 

  1. 离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。

  2. “标记清除”是目前主流的垃圾收集算法,这种算法的思想是 给当前不使用的值加上标记,然后再回收其内存。

  3. 另一种是“引用计数”。当代码中存在循环引用现象时,“引用计数”算法就会导致问题。

转载于:https://www.cnblogs.com/shy-huiying/p/5296796.html

代码交流 2021