美文网首页
执行环境和作用域

执行环境和作用域

作者: 橘子柚子橙子_ | 来源:发表于2018-08-04 00:32 被阅读0次

《JavaScript高级程序设计》读书笔记

执行环境是js中最为重要的一个概念。
执行环境定义了变量或函数有权访问的其它数据,决定了它们各自的行为。
每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

每个函数都有自己的执行环境。当执行流进入一个函数时,函数的环境会被推入到一个环境栈中。而在函数执行之后,栈将其环境弹出,把控制权返还给之前的执行环境。

当代码在一个环境中执行时,会创建变量对象的一个作用域链。它可以保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象。作用域链的下一个变量对象来自外部环境,而再下一个变量对象则来自下一个外部环境。这样,一直延续到全局执行环境。

标识符解析是沿着作用域链一级一级地搜索标识符的过程。搜索过程始终从作用域链的前端开始,然后逐级地向后回溯。直到找到为止。

上面的文字真的是很学术化,还是来看一段代码吧:

let color = 'blue';

function changeColor() {
    if (color === 'blue') {
        color = 'red';
    } else {
        color = 'blue'
    }
}

changeColor();

上面的代码定义了一个函数changeColor(),这个函数的作用域链包含两个对象:它自己的变量对象和全局的变量对象。可以在函数内部访问变量color,就是因为在这个作用域链中可以找到它。
在局部作用域中定义的变量可以在局部环境中和全局变量互换使用,例如:

let color = 'blue';

function changeColor() {
    let anotherColor = 'red';

    function swapColor() {
        let tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;

        // 这里可以访问到color/anotherColor/temColor
    }

    // 这里可以访问到anotherColor/color,但是无法访问tempColor
    swapColor();
}
// 这里只能访问到color
changeColor();

内部环境可以通过作用域链访问所有的外部环境。但外部环境不能内部环境中的任何变量和函数。
每个环境都可以向上搜索作用域链,查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。


完。

相关文章

  • JS学习之执行环境和作用域

    JS学习之执行环境和作用域 执行环境和作用域相关介绍 执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了...

  • JS 作用域与作用域链

    1. 作用域 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存。...

  • 作用域和作用域链

    1. 作用域 作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是私有作用域,它们都是栈内存。...

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

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

  • 执行环境 & 作用域 & 闭包

    执行环境 & 作用域 & 闭包 执行环境 , 作用域 , 闭包 , 闭包应用 执行环境 执行环境定义了 当前环境的...

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

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

  • js函数中的this

    前两篇文章“执行环境和作用域”和“js中的闭包”,我对谈了执行环境、作用域、作用域链和闭包的理解。但当牵涉到对象中...

  • js中的闭包

    在上一篇文章“执行环境和作用域”中,我试着梳理了执行环境和作用域的关系。但实际上,文章中并没有提到作用域,而是介绍...

  • 执行环境和作用域

    《JavaScript高级程序设计》读书笔记 执行环境是js中最为重要的一个概念。执行环境定义了变量或函数有权访问...

  • 执行环境和作用域

    执行环境(也就是常说的上下文)和作用域是js中很基础也很重要的概念, 但在很多时候,特别是看其他的文档的时候,却容...

网友评论

      本文标题:执行环境和作用域

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