美文网首页
关于作用域链

关于作用域链

作者: 西红柿w | 来源:发表于2018-05-19 11:34 被阅读0次

要了解作用域链,首先呢,先了解一下,什么是作用域

作用域

作用域,顾名思义就是起作用的区域。先看一个例子吧:

var a = 1
function fn1(){
  function fn2(){
    console.log(a)
  }
  function fn3(){
    var a = 4
    fn2()
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn()

在这个例子中一共有3层,从里往外看吧,最外层叫做全局变量,往里面看,function fn1()里面包裹着fn2和fn3,这是个局部变量,而里面呢,fn2和fn3也是一个局部变量,只是针对的对象不同,这是它的一个结构。

全局变量:最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的。
局部变量:和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的。
看到这里大家应该对于作用域有了一定的了解了。
那上面这个代码,控制台输出为a的值,那a的值为什么呢?带着这个问题,咱们继续了解一下作用域链

作用域链

作用域链:js的执行顺序是根据函数的调用来决定的,当一个函数被调用时,该函数环境的变量对象就被压入一个环境栈中。而在函数执行之后,栈将该函数的变量对象弹出,把控制权交给之前的执行环境变量对象。

看上一个例子吧,控制台输出a的值,但在fn2中并没有定义a的值,那么就往包裹着fn2的区域找,也就是fn1,定义变量a为2,所以就输出2。如果fn1中也没有定义a的值,那就在往外一层找,直到找到全局变量。

规则

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

相关文章

  • 作用域链

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

  • 作用域链和闭包

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

  • 作用域链

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

  • 关于作用域和作用域链

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

  • web性能实践

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

  • 关于作用域链

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

  • 关于作用域链

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

  • 关于作用域链

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

  • 关于作用域链

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

  • 关于作用域链

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

网友评论

      本文标题:关于作用域链

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