首页前端开发正文

怎么理解ES5里的作用域

朱绪2020-10-082749

在ES5里有两种作用域,一个是全局作用域,一个是函数作用域。

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函数存在于全局作用域里,相当于儿子。

当儿子没有某样东西是可以找爸爸要的,但我们很少听说爸爸会找儿子要东西。