2019-05-15


作用域链

JavaScript中,JavaScript里一切都是对象,包括函数。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是作用域,包含了函数被创建的作用域中对象的集合,称为函数的作用域链。

作用域(scope)

通常来说一段程序代码中使用的变量和函数并不总是可用的,限定其可用性的范围即作用域,作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

作用域链(scope chain)

作用域链决定了哪些数据能被函数访问。当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象填充。 

 在JS中,函数的可以允许嵌套的。即,在一个函数的内部声明另一个函数

    类似这样: 

function A(){

  vara=1;

  function B(){  //在A函数内部,声明了函数B,这就是所谓的函数嵌套。

        varb=2; 

  }

}


   对于A来说,A函数在执行的时候,会创建其A函数的作用域, 那么函数B在创建的时候,会引用A的作用域,类似下面这样

2019-05-15_第1张图片

函数B在执行的时候,其作用域类似于下面这样:

2019-05-15_第2张图片

 从上面的两幅图中可以看出,函数B在执行的时候,是会引用函数A的作用域的。所以,像这种函数作用域的嵌套就组成了所谓的函数作用域链。当在自身作用域内找不到该变量的时候,会沿着作用域链逐步向上查找,若在全局作用域内部仍找不到该变量,则会抛出异常。

你可能感兴趣的:(2019-05-15)