博客
关于我
JavaScript(五):变量的作用域
阅读量:769 次
发布时间:2019-03-23

本文共 1495 字,大约阅读时间需要 4 分钟。

JavaScript 变量作用域解析

在 JavaScript 的变量管理中,变量可以分为全局变量和局部变量两类,每种变量的作用域也不同。本文将详细讲解两者及其作用域的特点。

全局变量与局部变量的分类

JavaScript 中的变量分为两大类:

  • 全局变量:定义在函数外部的变量,其作用域范围覆盖整个脚本文件。
  • 局部变量:在函数内部定义的变量,其作用域仅限于该函数内部,外部无法访问。
  • 局部变量的作用域

    局部变量的定义和使用都具有特定的作用域限制。下面的代码示例说明了这一点:

    function fn() {
    var a = 5;
    document.write(a); // 输出:5
    }
    function fn2() {
    document(a); // 输出:undefined
    }
    fn();
    fn2();

    运行结果可以看出,adocument(a) 分别输出 5undefined,这体现了函数内部和外部变量的访问控制机制。

    全局变量的作用域

    全局变量的定义和修改具有更大的灵活性,例如:

    var number; // 全局变量
    function fn() {
    number = 5;
    document.write("number的值是:" + number + "
    ");
    }
    function fn2() {
    ++number;
    document.write("number的值是:" + number + "
    ");
    }
    fn();
    fn2();

    在上述代码中,number 在两个函数中都被修改,结果显示了全局变量的单独性和可修改性。

    特殊情形:就近原则

    在函数内部,如果你尝试访问与全局变量相同的名称,JavaScript 会采用就近原则,即优先访问局部变量:

    var number; // 全局变量
    function fn() {
    var number = "我是局部变量";
    document.write("number的值是:" + number + "
    "); // 输出:我是局部变量
    }
    function fn2() {
    number = "我是全局变量"; // 直接修改全局变量
    document.write("number的值是:" + number + "
    "); // 输出:我是全局变量
    }
    fn();
    fn2();

    运行结果可以看出,numberfn() 中输出为局部变量的值,而在 fn2() 中输出为全局变量的值。

    注意事项

  • 即时作用域:未使用 varletconst 关键字定义的变量,会在 window 对象上作为全局变量存在。

    a = 12; // 等价于 window.a = 12
    function fn() {
    b = "我是window对象, 是全局变量";
    }
    fn();
    document.write("a=" + a + "
    ");
    document.write("b=" + b + "
    ");

    输出结果会显示 ab 均为全局变量。

  • 减少全局变量的使用:为了避免代码冲突和维护困难,尽量减少全局变量的使用,建议使用块作用域(letconst)或局部变量。

  • 结果

    以上内容通过实际代码示例,清晰地解释了 JavaScript 中全局变量和局部变量的区别及作用域特点。通过这些知识点,你可以更好地理解 JavaScript 的变量管理方式,合理选择变量的定义和使用方式,以实现代码的高效管理和维护。

    转载地址:http://wfxzk.baihongyu.com/

    你可能感兴趣的文章
    Pinia:$patch的使用场景
    查看>>
    Pinia:$subscribe()的使用场景
    查看>>
    Pinpoint对Kubernetes关键业务模块进行全链路监控
    查看>>
    Pinterest 大规模缓存集群的架构剖析
    查看>>
    pintos project (2) Project 1 Thread -Mission 1 Code
    查看>>
    PinYin4j库的使用
    查看>>
    PIP
    查看>>
    pip install goose-extractor // SyntaxError: Missing parentheses in call to 'print'
    查看>>
    pip install 出现报asciii码错误的解决
    查看>>
    pip throws TypeError: parse() got an unexpected keyword argument ‘transport_encoding‘ 在尝试安装新软件包时
    查看>>
    pip 下载慢
    查看>>
    pip 安装出现异常
    查看>>
    Pip 安装失败:需要 SSL
    查看>>
    Pip 安装挂起
    查看>>
    pip/pip3更换国内源
    查看>>
    pip3 install PyQt5 --user 失败
    查看>>
    pip3命令全解析:Python3包管理工具的详细使用指南
    查看>>
    pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
    查看>>
    pipeline项目配置实战
    查看>>
    Pipenv 与 Conda?
    查看>>