第四章、变量、作用域和内存问题

ECMAScript变量包含两种类型的值:

基本类型值----简单的数据段

引用类型值----有多个值构成的对象


复制变量值:

基本类型值的复制---会在变量对象上创建一个新值。新复制的比变量和原变量彼此之间不会有影响

引用类型值的复制---也会将存储在变量对象中的只复制一份到为新变量分配的空间中,但是这个值的副本实际上是一个指 针,这个指针指向存储在堆中的一个对象。复制结束后两个变量将应用同一个对象,因此改变其中一个 变量会影响到另一个变量。


执行环境、变量对象及作用域:

  1. 执行环境定义了变量或函数有权访问的其他数据,决定了各自的行为。 
                                                                                                   
    在JavaScript中,执行环境分为三种:
    》全局执行环境---一旦代码被载入,引擎最先进入的就是这个环境。在浏览器中全局环境就是window对象。
    》函数执行环境---当执行一个函数时,js引擎进入执行环境。某个执行环境中的代码执行完之后,该环境销毁,保存在其中的所有变量 和函 数也随之销毁。
    》Eval执行环境---同上

    建立一个执行环境分为两个阶段:
    》进入上下文阶段:发生函数调用,进入执行环境时,此时具体的函数代码还没有执行
    》执行代码阶段:进行变量赋值,函数引用,以及执行其他代码。
  2. 个执行环境都有一个与之关联的变量对象。
  3. 变量对象保存了执行环境中的所有变量和函数。(、函数的形参 、var声明的变量 、函数声明(但不包含函数表达式))

    变量对象存在的两种方式:一种是全局对象(用Global表示)存放着全局属性和函数,我们可以通过this关键字引用到该对象。
    一种是函数执行环境中定义的变量对象,其在函数执行上下文中是不能直接访问的,被称为活动对象。
  4. 作用域:当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的前端,始终都是当前执行的代码所在的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对 象在最开始时只包含一个变量,即 arguments 对象(这个对象在全局环境中是不存在的)。作用域链中 的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延 续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象。
  5. 延长作用域链
    执行环境的类型总共有两种——全局和局部(函数)。因为有些语句可以在作用域链的前端临时增加一个变量对象,该变量会在代码执 行后被移除。当执行流进入到下列任何一个语句时,作用域链就会得到加长:
    》try-catch语句的catch块
    》with语句
    对 with 语句来说,会将指定的对象添加到 作用域链中。
    对 catch 语句来说,会创建一个新的变量对象
总结::
  •  确定一个值是哪种基本类型可以使用 typeof 操作符,而确定一个值是哪种引用类型可以使用 instanceof 操作符。
  • 所有变量(包括基本类型和引用类型)都存在于一个执行环境(也称为作用域)当中,这个执 行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。以下是关于执行环境的几 点总结:
     执行环境有全局执行环境(也称为全局环境)和函数执行环境之分;
     每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链;
     函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全 局环境;
     全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;
     变量的执行环境有助于确定应该何时释放内存。 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值