标签: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