• Javascript手记-执行环境和作用域


          执行环境是javascript一个重要的概念,执行环境定义了变量有权访问其他数据决定了他们各自的行为,每个执行环境

    都有一个与之关联的变量,环境中定义的所有变量和函数都保存在这个对象中,虽然我们编写的代码无法访问这个对象,但

    解析器在处理数据时候会在后台使用. 

         全局执行环境是最外围的一个执行环境,根据ecmascript实现所在的宿主环境不同,表示执行环境的对象也不一样在

    web浏览器中,全局执行环境被认为是window对象,因此所有的全局变量和函数都是作为window对象的属性和方法创建

    的某个执行环境所有代码执行完毕后,该环境被销毁,保存在其中所有变量和函数的定义也被销毁。  

       每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境会被推入一个函数栈中,而在函数执行之后,栈

    将其环境弹出,把控制权返回给之前的执行环境。 

       当代码在一个环境中执行时候。会创建变量对象的一个作用域链条(scope chain),作用域链的用途是保证对执行环境有

    权访问所有变量和函数有序访问,作用域链的前端,始终都是当前执行的代码所在环境的变量对象。

    代码事例:

    <script type="text/javascript">
        var color = "blue";
        function changeColor() {
            var anotherColor = "red";
            function swapColor() {
                var tempColor = anotherColor;
                anotherColor = color;
                color = tempColor;
            }
            //这里能访问swapColoer
            swapColor();
        }
        //这里能访问chagneColer
        changeColor();
    </script>
    

      运行观察控制台

    他有一个链式结构如下图

          此图表示特定的执行环境,内部环境可以通过作用域链访问所有的外部环境,也就是上层链条的对象,

    但是外部环境(底层链条)不能访问内部的任何变量和函数,这些环境之间的联系是线性的有次序的,每个

    环境都可以向上搜索作用域链条。

         当然后时候需要延长作用域链条,有些语句可以在作用域链的前端增加一些变量,该对象会在代码执行

    后被移除,一般有2种方法

        (1)try catch 

        (2)with语句

  • 相关阅读:
    @当你输入一个网址的时候,实际会发生什么?
    @Java魔法类——unsafer应用解析
    !@面试官:说说双亲委派模型?
    @JAVA字符串格式化
    @double精度比float低吗?
    @java类中资源加载顺序
    !@阿里资深架构师浅谈一个Java类的生命周期
    @String对象的那些事,几行代码就解释得清清楚楚
    @final、finally、finalize有什么区别?
    @35个Java代码优化的细节,你知道几个?
  • 原文地址:https://www.cnblogs.com/mongo/p/4438674.html
Copyright © 2020-2023  润新知