JS作用域以及作用域链
一丶作用域:在 Javascript 中,作用域分为 全局作用域 和 函数作用域
全局作用域:
代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域
函数作用域:
在固定的代码片段才能被访问
外层:a和b为最外层定义的为全局作用域,对于任何内部函数来说都是可以访问的(例如fn函数和fnItem函数都是可以访问到全局的a和b的)
fn函数:a和b在本函数内部可以访问,而对于函数外部是无法访问的(例如在全局作用域中访问a和b,fn函数中定义的a和b是访问不到的)
fnItem函数:a和b在本函数内部可以访问,函数外部是访问不到的(例如在全局或者fn函数中访问是访问不到fnItem中a和b的)
注意:需要注意的是,函数内部声明变量的时候,一定要使用var命令,如果不用的话,你实际上声明了一个全局变量!
二丶作用域链:一般情况下,变量取值到创建这个变量的函数的作用域中取值,但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链
如图中所示,在fnItem函数中,打印a+b+c,然而函数中没有a,b,c,则会去上一级查找,首先在fn函数中找到了b,b的值就为20,然后a和c没有找到,就继续往上查找,在全局作用域中找到了a,a的值就为10,然而c的值还是没有找到,此时已经不能往上查找了,所以c的值就为understand