博客
关于我
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/

    你可能感兴趣的文章
    Qt开发——圆面积计算器
    查看>>
    PostgreSQL学习总结(5)—— PostgreSQL table 创建与删除
    查看>>
    PostgreSQL学习总结(6)—— PostgreSQL 模式(SCHEMA)详解
    查看>>
    PostgreSQL学习总结(7)—— PostgreSQL 语句 INSERT INTO、SELECT、UPDATE、DELETE 等学习
    查看>>
    PostgreSQL学习总结(8)—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析
    查看>>
    PostgreSQL学习总结(9)—— PostgreSQL 运算符与表达式
    查看>>
    PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
    查看>>
    PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
    查看>>
    PostgreSQL学习笔记:PostgreSQL vs MySQL
    查看>>
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>
    PostgreSQL新手入门
    查看>>
    postgresql树状结构查询示例
    查看>>
    PostgreSQL流复制参数max_wal_senders详解
    查看>>
    postgresql流复制配置
    查看>>