[路飞]每日一答:什么是JS作用域链

128 阅读1分钟

什么是JS作用域链

一. 首先了解作用域

什么是作用域?个人理解作用域就是某个变量或某段代码可以被使用或访问到的的作用范围。JS中作用域分为全局作用域和函数作用域。

  • 全局作用域:

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

  • 函数作用域:

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

二. 作用域的上下级关系

上下级关系的确定就看函数是在哪个作用域下创建的,如果B在A的作用域中创建的,那么B为A的下级作用域。

<script>
  var a = 10 // 全局作用域
  function fun1 () {
    var b = 10 // 上级作用域
    function fun2 () {
      var c = 10 // 下级作用域
    }
  }
</script>

三.作用域链

作用域的取值过程,涉及到作用域链的概念。

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

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