码迷,mamicode.com
首页 > 其他好文 > 详细

执行环境及作用域

时间:2018-09-29 23:51:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:argument   var   bsp   对象   包含   局部变量   es6   程序   属性   

官方概念:

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

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

       

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

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

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

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

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

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

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

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

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

}

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

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

 

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

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

执行环境及作用域

标签:argument   var   bsp   对象   包含   局部变量   es6   程序   属性   

原文地址:https://www.cnblogs.com/aizzz/p/9726932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!