在ES5里有两种作用域,一个是全局作用域,一个是函数作用域。
配合着代码来解释吧:
<script type = "text/javascript"> var a = 0; func(); function func(){ var b = 1; console.log(a); // 0 函数作用域中访问全局变量 console.log(b); // 1 } console.log(b); // 报错 全局作用域中访问func函数作用域中的局部变量 </script>
上面这个代码,有两种作用域。
全局变量a存在于全局作用域里,变量b在函数func()的函数作用域里,也就是说b是一个局部的变量。
我们在函数作用域里访问变量a,在func函数作用域里找不到,不过没关系,会继续在全局作用域里找,所以console.log(a);结果是0。这种情况下除非全局作用域里也没有a才会报错呢。
当我们在全局作用域里访问b的时候,没找到b这个变量,这个时候是不能到函数作用域里找的,最终结果就是报错。
我们可以这么去理解全局作用域和函数作用域,他们是“父与子”的关系。
func函数存在于全局作用域里,相当于儿子。
当儿子没有某样东西是可以找爸爸要的,但我们很少听说爸爸会找儿子要东西。