美文网首页
作用域链的理解

作用域链的理解

作者: AuraAura | 来源:发表于2019-05-27 15:03 被阅读0次

关于作用域链《JavaScript高级程序设计》书上是这样说的:

当代码在一个环境中执行时,会创建变量对象的一个作用域链,作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。
标识符的解析是沿着作用域链一级一级搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级像后回溯,直到找到为止。如果找不到标识符,会导致错误的发生。

var color = "blue";
function changeColor() {
  var anontherColor = "red";
  function swapColor() {
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
    }
  swapColor();
}
changeColor();

作用域链图如下:

作用域链示意图
以上有三个执行环境,最外面一层是全局环境,在全局环境中包括changeColor()的局部环境和swapColor()的局部环境。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。当执行swapColor()时,他的变量对象在作用域链的最前端,后面依次是changeColor()的变量对象和全局环境的变量对象,swapColor()可以访问作用域链上所有的变量,除了自身执行环境中的变量,还包括changeColor()执行环境中的变量和全局环境中的变量。
swapColor()的 作用域链

当执行changeColor()时,他在作用域链的最前端,后面是全局环境变量对象。changeColor()可以访问changeColor()的环境变量和全局环境中的变量,但不可以访问swapColor()执行环境中的变量。

changeColor的作用域链
总结:内部环境可以用通过作用域链访问外部环境,但外部环境不能访问内部环境中的任何变量和函数。,每个环境可以向上搜索作用域链,查询变量和函数名。

相关文章

  • javascript基础知识问答-作用域和闭包

    1.理解词法作用域和动态作用域2.理解JavaScript的作用域和作用域链3.理解JavaScript的执行上下...

  • 作用域链的理解

    作用域链的理解 1可以把作用域链理解成是一个栈结构; 2每个作用域都有一个作用域对象用于保存在该作用域内创建的变量...

  • 作用域&js分号的作用

    以上代码输出为: 原因:作用域:执行上下文中包含作用域链在理解作用域链之前,先介绍一下作用域,作用域可以理解为执行...

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

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

  • 5分钟入门闭包

    理解闭包前先要理解两个概念:作用域和作用域链。一、作用域分为: 全局作用域 函数作用域 var a = 100 f...

  • 作用域/作用域链 闭包及其使用

    一、作用域、作用域链 作用域(scope) 浅显的理解: 作用域就是变量的可用范围(scope) 为什么要有作用域...

  • JavaScript 函数闭包(colsure)

    理解闭包,你首先必须理解JS的变量作用域,JavaScript作用域和作用域链。 ES6之前,变量的作用域分为全局...

  • 作用域链

    作用域链(scope chain) 理解: 作用域链决定了哪些数据能被函数访问。当一个函数创建后,它的作用域链会被...

  • 作用域链

    什么是作用域链? 在理解什么是作用域链之前,我们需要了解一个概念,那就是作用域。那么什么是作用域呢?简单的说,作用...

  • 面试宝典3

    1、说说你对作用域链的理解 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问...

网友评论

      本文标题:作用域链的理解

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