关于作用域链

参考文章: https://juejin.im/post/5afb0ae56fb9a07aa2138425

作用域

作用域就是一套规则,用于确定在何处以及如何查找变量(标识符)的规则

例:


关于作用域链_第1张图片
示例1.png

在foo函数执行的时候,输出一个a变量,这个a变量就是函数第一行定义a变量的代码 var a = 'ccccc'.

再一例:


关于作用域链_第2张图片
示例2.png

同样,再输出b的时候发现自己函数内部没有找到变量b,那么就在外层的全局中查找,找到了变量b就停止查找并输出。

两个例子都有查找变量,不同的是第一段代码是在函数中找到变量,第二段代码是在全局中找到b变量。也就是说第一段代码是在函数作用域中找到a变量,第二段代码是在全局作用域中找到b变量。
通俗的说 ** 作用域就是查找变量的地方**

作用域链

如上示例2,在查找b变量的时候,先在函数作用域中查找,没有找到,再去全局作用域中查找,有一个往外层查找的过程,就好像顺着一条链条从下往上查找变量,这条链条,就称之为作用域链

作用域嵌套

函数作用域肯定实在全局作用域里面的,而函数作用域中又可以继续嵌套函数作用域,如下图:

关于作用域链_第3张图片
示例3.png

代码则是:


关于作用域链_第4张图片
示例4.png

你可能感兴趣的:(关于作用域链)