执行环境及作用域

138 阅读2分钟

执行环境

执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为

变量对象

  • 执行环境定义的所有变量和函数都保存在这个对象中

  • 我们编写的代码无法访问这个对象,但在解析器在处理数据时会在后台使用它

    • 每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行之后,栈将其换将弹出,把控制权返回给之前的执行环境

作用域链

产生

  • 代码在一个环境中执行时,会创建变量对象的一个作用域链

用途

  • 保证对执行环境有权访问的所有变量和函数的有序访问

说明

  • 作用域链的前端(查找的开始),始终都是当前执行代码所在环境的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而在下一个变量对象则来自下一个包含环境。这样一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象

    • 如果这个环境是函数,则将其活动对象作为变量对象,活动对象最开始时只包含一个变量即arguments对象(这个对象在全局环境中是不存在的)

活动对象

标识符解析

  • 标识符解析是沿着作用域链一级一级地搜索标识符过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯,直至找到标识符为止(如果找不到标识符,通常会导致错误发生)