美文网首页
JS笔记:执行环境与作用域

JS笔记:执行环境与作用域

作者: klmhly | 来源:发表于2018-08-28 21:31 被阅读0次

    一、概念解析

    1. 执行环境

    是Js中最为重要的一个概念,执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。

    执行环境分类
    (1)全局执行环境
    指的是全局的,不在任何函数里的代码
    全局执行环境是最外围的一个执行环境。在 Web 浏览器中,全局执行环境被认为是 window 对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。代码载入浏览器时,全局执行环境被创建(当我们关闭网页或者浏览器时全局执行环境才被销毁)

    (2)函数执行环境
    在函数体内的代码
    每个函数都有自己的执行环境,当执行进入一个函数时,函数的执行环境就会被推入一个执行环境栈的顶部并获取执行权。当这个函数执行完毕,它的执行环境又从这个栈的顶部被删除,并把执行权并还给之前执行环境

    2. 变量对象

    每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

    变量对象包含,var定义的变量, function定义的函数, 以及形参
    例子:

    <script type="text/javascript">
    var color = "red";
    
    function changeColor(color1) {
        var color2 = color1;
    }
    
    changeColor(color)
    </script>
    

    对于这段代码变量对象有两部分:
    通过变量声明定义的变量color
    通过函数声明定义的函数 changeColor

    3. 活动对象

    如果这个环境是函数,则将其活动对象作为变量对象。活动对象是在进入函数的执行环境时创建的,并为该对象初始化一个 arguments 对象(这个对象在全局环境是不存在的!)。
    上面的代码活动对象当执行changeColor函数时被创建:

    1. 初始化生成的 arguments 对象
    2. 通过变量声明的变量 color2.

    4. 作用域链

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

    当多个函数嵌套关系时,内层的函数可以访问外层的变量,反之则不行。这就是作用域链的核心。解析过程是沿着作用域链一级一级从自身向外层搜索的。

    JS笔记:执行环境与作用域

    相关文章

      网友评论

          本文标题:JS笔记:执行环境与作用域

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