作用域链
JavaScript代码在执行时的上下文叫执行上下文也叫作用域,每个执行上下文都有一个自己的变量对象,当前上下文中的所有变量和函数都从这个变量对象中访问。
上下文分为全局上下文和函数上下文,全局上下文是最外层的上下文,当代码执行到函数内部时,函数上下文就会被推到一个上下文执行栈上执行,函数执行完之后上下文栈会弹出该函数上下文,控制权回到之前的上下文中。全局上下文在程序代码全部执行完毕后才会销毁。
代码执行流每进入一个新上下文,都会创建一个作用域链,用于搜索变量和函数。这个作用域链从当前上下文的变量对象链接到外一层的上下文的变量对象,一层层往外链接直到全局作用域的变量对象。变量和函数的查找就沿着这个作用域链进行查找,从最内层开始查找,找到就停止,找不到就去外面一层查找,直到找到全局上下文为止。
离开执行上下文的变量会被标记为可回收,再垃圾回收时被回收,释放变量的内存。
相关概念:
- 执行上下文(作用域)
- 全局上下文
- 函数上下文
- 块级上下文
- 上下文栈
- 变量对象
- 活动对象
- 作用域链