JavaScript 变量遮蔽

JavaScript 变量遮蔽

块作用域: 要理解JavaScript中的遮蔽现象,首先我们需要明确作用域的概念。在计算机编程语言中, 作用域 是程序中的某个区域,其中定义的变量可以存在和被识别,但在该区域之外是无法访问的。在JavaScript中, 是由花括号{}定义的复合语句,用于将多个语句组合成一个语句,JavaScript只期望一个语句。在一个块内部可以访问的所有变量和函数被称为块作用域,因此被称为 块作用域的。

例如,letconst变量存储在单独的内存空间中,所以被称为块作用域,而var变量可以在块之外访问,因为它存储在全局对象内存空间中,因此被称为 全局作用域的。

遮蔽: 当在特定作用域中声明一个变量,该变量与其外部作用域中的同名变量冲突时,当我们从内部作用域中调用变量时,内部作用域中变量被赋予的值将存储在变量的内存空间中。这被称为 遮蔽或变量遮蔽。 在JavaScript中,letconst在ECMAScript 6中的引入以及块作用域允许变量遮蔽。

示例:

function func() {
    let a = 'Geeks';
     
    if (true) {
        let a = 'GeeksforGeeks';  // New value assigned
        console.log(a); 
    }
     
    console.log(a); 
}
func();

输出:

GeeksforGeeks
Geeks

非法的变量遮蔽: 在遮蔽变量时,它不应穿越作用域的边界,即我们可以用 let 变量来遮蔽 var 变量,但不能反过来。因此,如果我们尝试用 var 变量来遮蔽 let 变量,这将被视为 非法的变量遮蔽 并将显示错误信息“变量已经定义。”

示例:

function func() {
    var a = 'Geeks';
    let b = 'Geeks';
     
    if (true) {
        let a = 'GeeksforGeeks'; // Legal Shadowing
        var b = 'Geeks'; // Illegal Shadowing
        console.log(a); // It will print 'GeeksforGeeks'
        console.log(b); // It will print error
    }
}
func();

输出:

Identifier 'b' has already been declared

注意: 箭头函数也遵循相同的作用域和变量遮蔽规则。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程