📜  JavaScript变量范围

📅  最后修改于: 2020-09-27 07:48:43             🧑  作者: Mango

在本教程中,您将借助示例来了解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的值是打招呼 。然后在函数内部访问变量a ,其值更改为3。

因此,在函数内部更改a之后,其值发生变化。

注意 :避免使用全局变量是一个好习惯,因为全局变量的值可以在程序的不同区域中更改。它可能会在程序中引入未知结果。


在JavaScript中,也可以在不声明变量的情况下使用变量。如果使用了未声明的变量,则该变量将自动成为全局变量。

例如,

function greet() {
    a = "hello"
}

greet();

console.log(a); // hello

在上面的程序中,变量a是全局变量。

如果使用let a = "hello"声明了变量,则程序将引发错误。

注意 :在JavaScript中,存在"strict mode";在不声明变量的情况下不能使用该变量。要了解有关严格的更多信息,请访问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是局部变量。只能在函数 greet内部访问变量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 x cannot be accessed here
    console.log(a + ' ' + b + ' ' + c);
}

greet();

输出

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

在上面的程序中,变量

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

因此,在以上程序中,前两个console.log()正常工作。

但是,我们正在尝试在第三个console.log()中的块外部访问块作用域变量c 。这将引发错误。


注意 :在JavaScript中, var是函数范围的, let是块作用域的。如果您尝试使用var c = 'hello';在上述程序的if语句内部,整个程序都可以工作,因为c被视为局部变量。

要了解有关let vs var的更多信息,请访问JavaScript let vs var