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

    你可能感兴趣的文章
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>
    OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
    查看>>
    OSG学习:纹理映射(五)——计算纹理坐标
    查看>>
    OSG学习:纹理映射(六)——灯光
    查看>>
    OSG学习:纹理映射(四)——三维纹理映射
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 概念型问题
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>
    OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
    查看>>