JS中的执行环境的理解
执行环境中定义了变量或函数有权访问的其他数据,每个执行环境关联一个变量对象(只在函数执行的过程中存在,但全局环境的变量对象是一直存在的),环境中所有的变量和对象都存在这个对象中,但我们无法访问到这个对象。
- 每个函数都有自己的执行环境,最外层有一个全局执行环境。
- 代码在执行环境中执行的时候,会创建一个变量对象的作用域链,用以确保变量和函数的有序访问。作用域链的前端始终是当前代码所在环境的变量对象。
- 作用域链的顺序问题:在创建一个函数时,会创建一个预先包含全局变量对象的作用域链,这个作用域链被保存在[[ Scope]] 属性中;当调用函数时创建一个执行环境,并复制这个属性构建起执行环境的作用域链,然后,活动对象(此作为变量对象使用)被创建并被推到执行环境作用域链的前端(与第2点呼应)。