首先介绍几个名词,第一次理解不了没关系,下面有详细的例子帮助理解。读完本文应该对js的作用域有个清晰的认识。
1.执行环境(简称为环境)
问1:什么是执行环境?
答:js代码由变量和函数两部分组成。执行环境定义变量和函数的作用域范围。
问2:执行环境太抽象了,有没有什么看见摸得着的来帮助理解?
答:执行环境概括的说只有两种。
<html>
<head></head>
<body>
<script>
var aa = 12;
function bb () {
var cc = 'hello javascipt';
alert(cc);
}
</script>
</body>
</html>
- 第一种:全局执行环境。即html/jsp中最外层的一个环境,通常理解为window对象。
上述代码中就存在一个全局执行环境,这个环境中有一个变量 aa和一个函数 bb;
调用全局执行环境中的变量 window.变量名,window. 也可以省略,如 window.aa;
调用全局执行环境中的函数 window.函数名() ,window. 也可以省略,如 window.bb()。
- 第二种:每个函数都有自己的执行环境。通常所说的执行环境都指这个,因为全局执行环境一个页面也就那么一个。
上述代码中bb函数就有一个执行环境——也可以认为是局部执行环境。这个执行环境中只有一个变量 cc。
问3:执行环境什么时候被创建,什么时候被销毁?
答:全局执行环境和局部执行环境分开说。
- 对于全局执行环境
加载页面时创建全局执行环境,关闭网页或浏览器时销毁全局执行环境。
- 对于局部执行环境
当调用这个方法时才会创建执行环境,单独的一个方法不去调用它是不会创建执行环境的;
该执行环境中所有代码执行完毕后,环境被销毁,保存在其中的所有变量和函数也随之销毁。
2.变量对象
每一个执行环境都有一个与之一一关联的变量对象。
问:什么是变量对象?
答:执行环境中定义的所有变量和函数都是存放在这个变量对象里的。