每个函数都有一个执行环境,当执行流进入一个函数时,将函数的环境推入一个执行栈中,而在函数执行之后,将环境弹出,把控制权交给之前的执行环境。
每个执行环境都有一个对应的变量对象,环境中定义的所有变量、函数保存在此对象中。
当代码在一个环境中执行时,会创建变量对象的一个作用域链。
(作用域链用于保证对执行环境有权访问的所有变量和函数的有序访问)
作用域链的最前端是当前代码对应的变量对象。(若是函数,活动对象是变量对象)。活动对象开始只有一个arguments对象。
作用域链的下一个来自包含(外部)环境,再下一个来自下一个包含环境。
- 标识符的搜索从最前端开始,逐级向后回溯,直到找到标识符,否则error