《JavaScript高等程序设计(第3版)》——变量、作用域和内存题目(四)

变量、作用域和内存题目

ECMAScript 数据范例

基础范例(5种):

  • UndefinedNullBooleanNumberString
  • typeof() 检测一个变量是不是是基础数据范例
  • 基础范例在内存中占有牢固大小的空间,因而被保留在 内存中。
  • 从一个变量向另一个变量复制 基础范例 的值,会建立这个值的一个副本。

援用范例:

  • 保留在内存中的对象。
  • 援用范例的值是对象,保留在 内存中。
  • instanceof() 检测是什么范例的对象

    • alert (color instanceof Array)  // true or false
      alert (persion instanceof Object) // true
  • 包含援用范例值的变量实际上包含的并非对象自身,而是一个指向该对象的指针。
  • 从一个变量向另一个变量复制 援用范例 的值,复制的实际上是指针,因而两个变量终究都指向同一个对象。

实行环境及作用域

一切变量(包含基础范例和援用范例)都存在于一个实行环境当中,这个实行环境(也称为作用域)决议了变量的生命周期,以及哪一部份代码能够接见个中的变量。

实行环境的范例有两种:

  • 全局(全局实行环境)
  • 部分(函数实行环境)

每一个环境都能够向上搜刮作用域链,以查询变量和函数名;但任何环境都不能通过向下搜刮作用域链而进入另一个实行环境。(内部可通过作用域链接见外部,外部不能接见内部)。

延伸作用域链

当实行流进入以下任何一个语句时,作用域链就会获得加长:

  • try-catch 语句的catch
  • with语句

没有块级作用域

关于 javascript 来讲,由 for 语句建立的变量 i 在 for 轮回完毕后,也照旧存在于轮回外部的实行环境中。

for (var i =0; i < 10; i++) {
    doSomething(i);
}
alert(i); //10
  • 声明变量:

    • 运用 var 声明:添加到最接近的环境中。
    • 不必 var 声明,自动添加到全局环境。所以发起一定要先声明。
  • 查询标识符:

    • 从作用域的前端最先,向上逐级查询与给定名字婚配的标识符。

渣滓网络

JavaScript 具有自动渣滓网络机制,也就是说,实行环境会担任治理代码实行过程当中运用的内存。

道理:找出那些不再运用的变量,然后开释其占用的内存。渣滓接纳器会根据牢固的时候距离周期性的实行这一操纵。

一般有两个战略:

标记消灭(最经常使用的渣滓消灭体式格局)

援用计数(不太罕见)

    原文作者:MandyShen
    原文地址: https://segmentfault.com/a/1190000018765037
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞