美文网首页
028|JavaScript变量作用域

028|JavaScript变量作用域

作者: 中年小钢炮 | 来源:发表于2017-05-21 14:19 被阅读20次

    在前一节中,我们学习了通过var关键字创建变量。现在考虑一个问题,变量在脚本的任意地方都能被引用吗?

    先来看一下例子:

    function changeAge()
    {
        var age = 18;
    }
    console.log(age);
    

    上面的代码在函数体内定义了一个age变量,然后试图在函数体外引用这个变量。这个脚本能正常输出age变量的值吗,我们来看一下结果:

    运行结果

    可以看到,运行过程中发生了异常。异常的内容是:“age is not defined”,意思是age没有定义。为什么会这样?这背后的原因是什么?

    JavaScript中每一个变量都有自己的作用域,在ES6标准之前,有两种作用域:

    • 全局作用域
      在脚本顶层即函数体外的区间,叫作全局作用域。在全局作用域内定义的变量,叫做全局变量。全局变量在代码任何地方都能被引用。
    • 局部作用域
      在函数内的区间,叫做局部作用域。在局部作用域内定义的变量,叫局部变量。局部变量只能在函数内被引用。

    ECMAScript 6 (缩写为ES6)标准是JavaScript的语言标准,因其于2015年正式应用,因此也叫ES2015。

    上述代码之所有会发生异常,是因为尝试在全局作用域中引用局部变量。

    function changeAge()
    {
        var age = 18;  // 局部变量
    }
    
    console.log(age); // 全局作用域
    

    所以,全局作用域不能访问局部变量。那么局部作用域是否能访问全局变量呢?通一个例子来试一下:

    var age = 18; // 全局变量
    function changeAge()
    {
        console.log(age);   // 局部作用域
    }
    changeAge()
    

    上述代码中,尝试在局部作用域内输出全局变量。我们看一下运行结果 :

    运行结果

    可以看到,成功输出了全局变量。所以,局部作用域可以访问全局变量。

    好,这一节讲完了。恭喜你!掌握了JavaScript中非常关键的作用域概念。后续还有很多技巧需要你慢慢学习。

    什么是声明提升(hoisting)?
    是函数默认参数?
    什么是自定义类型?

    请继续关注我的课程,我将在后续课程中为大家解答上述问题。

    想学计算机技术吗?需要1对1专业级导师指导吗?想要团队陪你一起进步吗?欢迎加我为好友!

    我的微信

    相关文章

      网友评论

          本文标题:028|JavaScript变量作用域

          本文链接:https://www.haomeiwen.com/subject/xxrmxxtx.html