作用域和作用域链

作用域链

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

作用域(scope)

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

作用域链(scope chain)

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

作用域

在js中,作用域分为全局作用域和函数作用域

全局作用域:

代码在程序的任何地方都能被访问,window 对象的内置属性都拥有全局作用域。

函数作用域:

在固定的代码片段才能被访问

举个栗子

作用域和作用域链_第1张图片
作用域有上下级关系,上下级关系的确定就看函数是在哪个作用域下创建的。如上,fun1作用域下创建了fun2函数,那么“fun1作用域”就是“fun2作用域”的上级。

作用域链

一般情况下,变量取值到 创建 这个变量 的函数的作用域中取值。

但是如果在当前作用域中没有查到值,就会向上级作用域去查,直到查到全局作用域,这么一个查找过程形成的链条就叫做作用域链。

举个栗子

作用域和作用域链_第2张图片

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