JavaScript 变量作用域

    在本教程中,您将借助示例了解 JavaScript 中的变量作用域。
    作用域是指代码某些部分中变量和函数的可用性。
    在 JavaScript 中,变量有两种作用域:

  1. 全局作用域
  2. 局部作用域
全局作用域

    在程序顶部或函数外部声明的变量被视为全局作用域的变量。
    让我们来看一个全局作用域变量的示例。

// program to print a text 
let a = "hello";

function greet () {
    console.log(a);
}

greet(); // hello

    在上面的程序中,变量 a 在程序顶部声明,是一个全局变量。这意味着变量 a 可以在程序中的任何地方使用。
    全局变量的值可以在函数内部更改。例如,

// program to show the change in global variable
let a = "hello";

function greet() {
    a = 3;
}

// before the function call
console.log(a);

//after the function call
greet();
console.log(a); // 3

    在上面的程序中,变量 a 是一个全局变量。值 a 为 hello。那么在函数内部访问变量 a ,值变为 3。
    因此,在函数内部更改 a 值后,全局变量 a 的值会更改。
    注意:避免使用全局变量是一种很好的做法,因为全局变量的值可能会在程序的不同区域发生变化。它可能会在程序中引入未知结果。
    在 JavaScript 中,变量也可以在不声明的情况下使用。如果使用变量时未声明该变量,则该变量将自动成为全局变量。
    例如,

function greet() {
    a = "hello"
}

greet();

console.log(a); // hello

    在上面的程序中,变量 a 是一个全局变量。
    如果使用 let a=“hello” 声明变量,程序将抛出一个错误。
    注意:在 JavaScript 中,有“严格模式”;在这种情况下,不声明变量就不能使用它。要了解有关 strict 的更多信息,请访问JavaScript strict

局部作用域

    变量也可以具有局部作用域,即只能在函数中访问。

示例 1:局部作用域变量
// program showing local scope of a variable
let a = "hello";

function greet() {
    let b = "World"
    console.log(a + b);
}

greet();
console.log(a + b); // error

输出

helloWorld
Uncaught ReferenceError: b is not defined

    在上面的程序中,变量 a 是全局变量,变量 b 是局部变量。变量 b 只能在函数内部访问。因此,当我们试图在函数外部访问变量 b 时,会发生错误。

let 代表块作用域

    let 关键字代表块作用域(变量只能在块中访问)。

示例 2:块作用域的变量
// program showing block-scoped concept
// global variable
let a = 'Hello';

function greet() {

    // local variable
    let b = 'World';

    console.log(a + ' ' + b);

    if (b == 'World') {

        // block-scoped variable
        let c = 'hello';

        console.log(a + ' ' + b + ' ' + c);
    }

    // variable c cannot be accessed here
    console.log(a + ' ' + b + ' ' + c);
}

greet();

    输出

Hello World
Hello World hello
Uncaught ReferenceError: c is not defined

    在上面的程序中,变量

  • a 是一个全局变量。它可以在程序中的任何地方访问。
  • b 是一个局部变量。它只能在函数内部访问。
  • c 是块作用域变量。它只能在 if 语句块内访问。

    因此,在上述程序中,前两个 console.log() 可以正常工作。
    然而,我们试图在第三个 console.log() 之外访问块作用域变量 c。这将抛出一个错误。
    注意:在 JavaScript 中,var 是函数作用域,let 是块作用域。如果您尝试使用 var c=‘hello’;在上述程序中的 if 语句中,整个程序工作,因为 c 被视为局部变量。
    要了解关于 let vs var 的更多信息,请访问JavaScript let vs var

上一教程JS Functions                                         下一教程JS Hoisting

参考文档

[1] Parewa Labs Pvt. Ltd. (2022, January 1). Getting Started With JavaScript, from Parewa Labs Pvt. Ltd: https://www.programiz.com/javascript/variable-scope

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值