JavaScript Variable Scope函数详解

首页 / ES6入门教程 / JavaScript Variable Scope函数详解

范围是指代码某些部分中变量和函数的可用性。

在JavaScript中,变量具有两种范围:

  1. 全局范围
  2. 局部范围

全局范围

在程序顶部或函数外部声明的变量被视为全局范围变量。

让无涯教程来看一个全局范围变量的例子。

// 打印文本的程序
let a = "hello";

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

greet();//hello

在上述程序中,变量 a 在程序顶部声明,并且是全局变量。这意味着变量 a 可以在程序中的任何位置使用。

可以在函数内部更改全局变量的值。例如,

// 显示全局变量变化的程序
let a = "hello";

function greet() {
    a = 3;
}

// 在函数调用之前
console.log(a);

//函数调用后
greet();
console.log(a);//3

在上面的程序中,变量 a 是全局变量。 a 的值是 hello 。然后在函数内部访问变量 a ,值更改为 3。

因此, a 的值在函数内部更改后会更改。

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

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

例如,

function greet() {
    a = "hello"
}

greet();

console.log(a);//hello

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

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

注意:在JavaScript中,存在"严格模式"; ,其中的变量必须在未声明的情况下使用。要了解有关严格的更多信息,请访问 JavaScript 严格

局部范围

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

示例1: 局部变量

// 显示变量局部范围的程序
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:块作用域变量

// 显示块范围概念的程序
// 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

在上面的程序中,变量

链接:https://www.learnfk.comhttps://www.learnfk.com/es6/variable-scope.html

来源:LearnFk无涯教程网

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

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

但是,无涯教程试图在第三个 console.log()中的块外部访问块范围变量 c 。这将引发错误。

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

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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Java核心技术面试精讲 -〔杨晓峰〕

零基础学Python -〔尹会生〕

小马哥讲Spring核心编程思想 -〔小马哥〕

分布式系统案例课 -〔杨波〕

如何成为学习高手 -〔高冷冷〕

反爬虫兵法演绎20讲 -〔DS Hunter〕

eBPF核心技术与实战 -〔倪朋飞〕

快手 · 音视频技术入门课 -〔刘歧〕

大型Android系统重构实战 -〔黄俊彬〕

好记忆不如烂笔头。留下您的足迹吧 :)