一、概念解析
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函数时被创建:
- 初始化生成的 arguments 对象
- 通过变量声明的变量 color2.
4. 作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。
JS笔记:执行环境与作用域当多个函数嵌套关系时,内层的函数可以访问外层的变量,反之则不行。这就是作用域链的核心。解析过程是沿着作用域链一级一级从自身向外层搜索的。
网友评论