执行环境及作用域

Posted aizzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行环境及作用域相关的知识,希望对你有一定的参考价值。

官方概念:

       执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。

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

       

        关于执行环境,最外围的执行环境就是全局执行环境,在Web浏览器中,全局环境默认为window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的,

 某个执行环境的代码执行完毕后,该环境被销毁,该执行环境的变量和函数定义也随之销毁

 (全局执行环境直到应用程序退出 例如关闭网页或浏览器时  才会被销毁)

        还有一个与执行环境相关的概念是作用域链,作用域链保证了对执行环境有权访问的所有变量和函数的有序访问,作用域链的前端,始终是当前代码执行环境所在的变量对象

如果这个环境是函数,则将其活动对象作为变量对象,最开始只包含一个变量。即arguments对象

作用域链的下一个变量对象来自包含(外部)环境,以此类推,最后一个对象是全局执行环境中的变量对象

标识符的解析是沿着作用域链一层层向外查找的,找不到则报错。

ES6 之前没有块级作用域 ,如if语句循环变量定义的 i也会被添加到当前执行环境中 ;ES6中 let解决了这个问题

for(var i = 0;i<len;i++){

}

另外 使用var声明的变量会自动被添加到最接近的环境中,在函数内部便是函数的局部变量,

不使用var声明,则自动被添加到全局环境中

 

tip  : 可以使用window.变量名 访问window全局变量

      访问局部变量比全局变量快, 所以标识符搜索js引擎还是挺不错的!

以上是关于执行环境及作用域的主要内容,如果未能解决你的问题,请参考以下文章

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

执行环境及作用域

JavaScript 执行环境及作用域

js中的执行环境及作用域

执行环境及作用域

JS基础--执行环境及作用域