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

    你可能感兴趣的文章
    ntpdate 通过外网同步时间
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>
    numpy 数组与矩阵的乘法理解
    查看>>