美文网首页
关于作用域链

关于作用域链

作者: 巴依老爷_0b46 | 来源:发表于2018-05-06 15:31 被阅读0次

作用域

先来谈谈变量的作用域
变量的作用域无非就是两种:全局变量和局部变量。
全局作用域:
最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的:

<script>
      var outerVar = "outer";
      function fn(){
         console.log(outerVar);
      }
      fn();//result:outer
   </script>

局部作用域:
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部

<script>
      function fn(){
         var innerVar = "inner";
      }
      fn();
      console.log(innerVar);// ReferenceError: innerVar is not defined
</script>

需要注意的是,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!

作用域链(Scope Chain)

那什么是作用域链?
当我们在局部作用域中,访问一个变量时,系统首先会在当前作用域中寻找变量var的声明语句,如找到则直接使用。反之,则继续向上一级作用域中寻找var的声明语句,如找到则直接使用,反之,继续向上一级作用域中去寻找…直到全局作用域,如找到则直接使用,如未找到则直接在全局作用域中声明该变量,我们把这种链式查询关系就称之为为作用域链!

    // 全局作用域: script标签包裹的内容就是一个作用域
    var abc = 123;
    // fn 中能访问到的变量由那些:
    // 1 自身定义的变量
    // 2 上一级作用域中的变量(全局作用域)

    // foo 中能访问到的变量由那些:
    // 1 自身定义的变量
    // 2 函数fn中的变量
    // 3 全局作用域中的变量
    function fn() {
        var a = 456;

        function foo() {
            var num = 123;

            // f的作用域链: f作用域 -> foo作用域 -> fn作用域 -> 全局作用域
            function f() {}
        }
        foo();
        // console.log(num);
    }

注意

  • 函数在执行的过程中,先从自己内部找变量
  • 如果找不到,再从创建当前函数所在的作用域去找, 以此往上
  • 注意找的是变量的当前的状态

相关文章

  • 作用域链

    作用域链 作用域:就近原则在写下声明就能确定的,叫做词法作用域 词法作用域可以确定是哪个a,但不能确定a的值 关于...

  • 作用域链和闭包

    在谈作用域链之前先说一下与作用域链关系紧密的执行环境和作用域。 作用域:作用域指的是变量的适用范围。 作用域链:作...

  • 作用域链

    作用域链 把多个作用域串起来便形成了作用域链;每个函数在初始化完成之后就拥有了各自的作用域链,但此时的作用域链中并...

  • 关于作用域和作用域链

    作用域 在JavaScript中,我们可以将作用域定义为一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的子...

  • web性能实践

    一. 作用域 前面我们了解作用域概念的以及作用域链是如何运作的。 随着作用域链中的作用域数量的增加,访问当前作用域...

  • 关于作用域链

    要了解作用域链,首先呢,先了解一下,什么是作用域。 作用域 作用域,顾名思义就是起作用的区域。先看一个例子吧: 在...

  • 关于作用域链

    JavaScript 有两种作用域:全局作用域和函数作用域。 函数内部可以直接读取全局变量,但是函数外部不能读取函...

  • 关于作用域链

    执行环境(execution context) 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为。...

  • 关于作用域链

    作用域 作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域...

  • 关于作用域链

    作用域 先来谈谈变量的作用域变量的作用域无非就是两种:全局变量和局部变量。全局作用域:最外层函数定义的变量拥有全局...

网友评论

      本文标题:关于作用域链

      本文链接:https://www.haomeiwen.com/subject/uwdurftx.html