执行环境,变量对象及作用域链

        • 1 概念
        • 2 执行环境
        • 3 变量对象
        • 4 作用域链
        • 5 总结

1 概念

首先来看一下 javascript 高级程序设计中的概念

执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象,执行环境中定义的所有变量和函数都保存在这个对象中。
作用域链:当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问

2 执行环境

执行环境,顾名思义,是执行的时候才会被创建的环境。如果代码没有执行,则不会创建执行环境。执行环境又分为全局执行环境和函数执行环境。

首先,有一个全局执行环境,根据 ECMAScript 实现所在的宿主环境不同,表示执行环境的对象也不同。在 web 浏览器中即 window 对象,因此所有全局变量和函数都是作为 window 对象的属性和方法创建的。全局执行环境直到应用程序退出,例如关闭网页或浏览器才会被销毁。

每个函数也有自己的执行环境。当执行流进入一个函数时,函数的环境就会被推入环境栈(也叫调用栈)中。当函数执行后,栈将其环境弹出,把控制权交给之前的执行环境。

javascript 函数的执行有一个调用栈,当调用一个函数的时候这个函数就会被加入到调用栈中。拿之前的 浅析 javascript 中 this 的指向 ( 箭头函数 ) 关于调用位置的那段代码来举例


你可能感兴趣的:(javascript,执行环境,作用域链,变量对象)