📜  什么是阻塞作用域变量 ES6?

📅  最后修改于: 2022-05-13 01:56:27.309000             🧑  作者: Mango

什么是阻塞作用域变量 ES6?

在 ES5 中,当我们使用var关键字声明变量时,变量的作用域要么是全局的,要么是局部的。
全局变量:当我们在函数之外声明一个变量时。
局部变量:当我们在函数内部声明一个变量时。

但是,ECMAScript 2015 (ES6) 引入了两个新关键字letconst 这两个关键字在 JavaScript 中提供了块作用域。在大括号 { } 中声明的所有变量都被限制为只能在该块内和该块的块内访问。我们无法访问该块之外的变量,它要么通过 ReferenceError(变量未定义),要么如果他在全局范围内有一个同名的变量,那么它将引用该变量。

let 关键字:使用var关键字声明的变量允许重新声明,但不允许在同一块中使用let关键字声明的变量重新声明。它将通过一个 SyntaxError: Identifier has been declared。

例子:

HTML


HTML


HTML


HTML


HTML


输出:

5
10
15
10
15
ReferenceError: y is not defined

这里我们看到 x 和 z 都在外部块中声明,引用 if 的块 {} 和 y 在内部块中声明。这里 z 是使用 var 关键字声明的,所以我们在这个 valueAssign()函数中的任何地方都使用 z 变量,因为使用 var 关键字声明的变量不能具有块作用域。但是 x 和 y 都是使用 let 关键字声明的。这里 x 在外部块中声明,因此我们可以在内部块中使用 x。由于 y 是在内部块中声明的,所以我们不能在外部块中使用它。 Let 和 const 将作用于我将声明的块,并将作用于其中的块。出于这个原因,当我们在外部块中打印 y 时,它会给出错误。

示例 2:在此示例中,我们将看到使用varlet重新声明变量的工作:

HTML


输出:

30
5
20
SyntaxError: Identifier 'x' has already been declared

const 关键字:用const关键字声明的变量严格不允许在同一个块中重新声明和重新赋值。当您不想在整个程序中更改该变量的值时,我们使用const关键字。

示例:在此示例中,我们将看到使用const重新分配变量的工作原理

HTML


输出 :

TypeError: Assignment to constant variable.

示例 2:在此示例中,我们将看到使用const重新声明变量的工作原理

HTML


输出:

SyntaxError: Identifier 'x' has already been declared

示例 3:在此示例中,我们将看到 Block Scope 与const的工作方式

HTML


输出 :

5
10
15
10
15
ReferenceError: y is not defined