Javascript执行机制(三)作用域链和闭包
在上一篇关于作用域的文章中我们通过调用栈讲什么是作用域。
每当我们调用一个函数时就会在调用栈中为该函数创建执行上下文,到目前为止我们知道了该执行上下文中有变量环境,用于存储通过var声明的变量,也有一个词法环境,词法环境又是一个栈,依次放置了函数中通过let和const声明的在不同层级的块级作用域中的变量。
基于上面的变量环境和词法环境,我们可以明白如何在一个函数的执行上下文中找到正确的变量。
那如果我们所需要的变量其实不在当前执行上下文,而是在上一级的执行上下文中呢?我们怎么确定上一级的执行上下文是哪个?
这个问题就涉及了我们今天的主题:作用域链。
理解作用域链是理解闭包的基础,而闭包在 JavaScript 中几乎无处不在,同时作用域和作用域链还是所有编程语言的基础。所以,如果你想学透一门语言,作用域和作用域链一定是绕不开的。