美文网首页
关于执行环境与作用域链

关于执行环境与作用域链

作者: usopp酱 | 来源:发表于2018-04-14 01:10 被阅读0次

执行环境

  • 全局执行环境是最外围的一个执行环境。
  • 每个函数都有自己的执行环境。

作用域链

当代码在一个环境中执行时,会创建变量对象(variable object)的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。

举例

var a = 1
function fn1(){
  function fn2(){
    console.log(a)// 这里可以访问到自己的变量对象、fn1()变量对象、全局变量对象
  }
  function fn3(){
    var a = 4
    fn2() // 这里可以访问到自己的变量对象、fn1()变量对象、全局变量对象
  }
  var a = 2
  return fn3 // 这里可以访问到自己的变量对象、全局变量对象,但这里不能访问fn2()、fn3()变量对象
}
var fn = fn1()
fn() //2
  • 以上代码有4个执行环境:
  1. 全局执行环境(包括变量a=1、函数fn1)
  2. fn1()的局部环境 (包括变量a=2、函数fn2、函数fn3)
  3. fn2()的局部环境
  4. fn3()的局部环境(变量a=4)


    执行环境.jpg

上图表示是特定的执行环境。其中,内部环境可以通过作用域链去访问到所有外部环境,但外部环境不能访问内部环境的任何变量和函数。每个环境都可以向上搜索作用域链,以查询变量和函数,但不能向下搜索作用域链。例如fn2在所在区域搜索不到,只能向上搜索变量。即fn2()
的作用域链中包含3个对象:自己的变量对象、fn1()变量对象、全局变量对象

  • 执行代码的思路:
    调用fn()———》执行fn1()———》renturn fn3()————》执行fn3——》执行fn2——》console.log(a)所在区域没有a,向父级作用域找a——》输出2;

相关文章

  • JS_0: 执行环境和作用域链

    JavaScript,目前对于执行环境和作用域链的理解 什么是作用域链? 要讲作用域链就得先讲执行环境。 每个函数...

  • 作用域链和闭包

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

  • Javascript 作用域链、闭包的理解和应用

    1. 什么是作用域,作用域链 作用域,指代码所在的执行环境。代码执行时产生的最先产生的执行环境,称为全局作用域, ...

  • javascript的执行上下文—作用域链 闭包

    js作用域:函数作用域、全局作用域作用域链:由当前环境与上层环境的一系列变量对象组成,它保证了当前执行环境对符合访...

  • 关于执行环境与作用域链

    执行环境 全局执行环境是最外围的一个执行环境。 每个函数都有自己的执行环境。 作用域链 当代码在一个环境中执行时,...

  • 作用域链

    作用域链总结 当代码在一个环境中执行时,都会创建一个作用域链。 作用域链的用途是保证对执行环境有权访问的所有变量和...

  • JS-作用域链

    什么是作用域链? 当代码在一个环境中执行时,都会创建一个作用域链。 作用域链的用途是保证对执行环境有权访问的所有变...

  • 作用域链&引用类型

    作用域链&引用类型 执行环境与引用类型是JavaScript中的重要概念。 执行环境(execution cont...

  • JavaScript学习-执行环境、作用域链

    点这里 ☟ JavaScript学习-执行环境、作用域链

  • 变量函数提升与执行上下文

    变量与函数提升 作用域与执行上下文的区别 执行上下文 执行上下文栈 作用域 作用域链

网友评论

      本文标题:关于执行环境与作用域链

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