作用域
通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。而区域大致可分为局部作用域和全局作用域。
在这段代码中,第一个a的声明是在函数fn外部,而第二个a的声明在函数内部,在函数内部打印a,毫无疑问为20,但第二个a的打印,却没有遵从代码解析的顺序性,没错,在函数内a的声明只会在函数内部生效,这个局部作用域,而在函数外部所声明的a,体现的是全局作用域。
作用域链
一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。
但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。
比如:
当在没有声明的a时,打印函数优先在函数内部本级寻找,本级没有的话,再往上级找,直到找到为止,此时var a = 10,即a=10