资讯专栏INFORMATION COLUMN

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

YacaToy / 1218人阅读

摘要:执行环境的类型有两种全局全局执行环境局部函数执行环境每个环境都可以向上搜索作用域链,以查询变量和函数名但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。内部可通过作用域链访问外部,外部不能访问内部。

变量、作用域和内存问题 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 具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

原理:找出那些不再使用的变量,然后释放其占用的内存。垃圾回收器会按照固定的时间间隔周期性的执行这一操作。

通常有两个策略:

标记清除(最常用的垃圾清除方式) 引用计数(不太常见)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103218.html

相关文章

  • JavaScript高级程序设计》(3)读书笔记 4章 变量作用域和内存问题

    摘要:具体说就是执行流进入下列任何一个语句时,作用域链就会得到加长语句的块。如果局部环境中存在着同名的标识符,就不会使用位于父环境中的标识符访问局部变量要比访问全局变量更快,因为不用向上搜索作用域链。 基本类型和引用类型的值 ECMAscript变量包含 基本类型值和引用类型值 基本类型值值的是基本数据类型:Undefined, Null, Boolean, Number, String ...

    lidashuang 评论0 收藏0
  • JavaScript高级程序设计》笔记:变量作用域和内存问题

    摘要:局部变量只在函数执行过程中存在。此时,局部变量就没有存在的必要了,因此可以释放他们所占的内存以供他们使用。引用计数的含义是跟踪记录每个值被引用的次数。这一做法适合于大多数全局变量和局部变量的属性。 基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型的值指那些可能有多个值构成的对象。 动态的属性 ...

    Zack 评论0 收藏0
  • JavaScript 闯关记》之作用域和闭包

    摘要:作用域和闭包是最重要的概念之一,想要进一步学习,就必须理解作用域和闭包的工作原理。全局和局部作用域的关系在函数体内,局部变量的优先级高于同名的全局变量。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。 作用域和闭包是 JavaScript 最重要的概念之一,想要进一步学习 JavaScript,就必须理解 JavaScript 作用域和闭包的工作原理。 作用域 任何...

    Jacendfeng 评论0 收藏0
  • JavaScript红宝书笔记()---变量作用域和内存问题

    摘要:在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。标记清除是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后再回收其内存 1.在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。 2.当从一个变量向另一个变量复制引用类型的值时,两个变量实际上将引用同一个对象,因此,改变其中一个变量,就会...

    imtianx 评论0 收藏0
  • Javascript高级程序设计 ()》变量作用域和内存问题

    摘要:在中虽然对象通过标记清除的方式进行垃圾收,但与对象却是通过引用计数回收垃圾的,也就是说只要涉及及就会出现循环引用问题。如果垃圾收集例程回收的内存分配量低于,则变量字面量和或数组元素的临界值就会加倍。 只挑本人重要的写(有夹杂其他补充) 基本类型和引用类型的值 描述:基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 动态的属性 引用类型的值,我们可以为其添加属性和...

    szysky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<