JavaScript 变量作用域

x33g5p2x  于2022-04-16 转载在 Java  
字(2.1k)|赞(0)|评价(0)|浏览(220)

在本教程中,您将借助示例了解 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

相关文章

微信公众号

最新文章

更多