1. 什么是块级作用域
在 JavaScript 中,变量的作用域一般分为全局作用域和函数作用域。全局作用域中声明的变量的作用域是整个程序中的任何位置,而函数作用域中声明的变量只在该函数内部有作用。但是,如果在函数内部使用 var 关键字声明变量,该变量会被提升到该函数的作用域的顶部,也就是说在函数内部的任何位置都可以访问该变量。
ES6 引入了块级作用域的概念,块级作用域指的是一对花括号 {}
中的代码块所形成的作用域。使用 let 和 const 关键字声明的变量只在代码块内部有作用,出了这个代码块就不能再使用了。
2. let 关键字
使用 let 关键字声明的变量有以下几个特点:
- 只在 let 命令所在的代码块内有效。
- 不存在变量提升。这意味着在 let 命令声明之前,该变量是不能被使用的。
- 不允许重复声明。在同一个代码块内不允许重复使用 let 命令声明同一个变量。
下面是一个使用 let 命令的例子:
for (let i = 0; i < 5; i++) { console.log(i); } console.log(i); // i is not defined
在这个例子中,使用 let 关键字声明的变量 i 只在 for 循环代码块内有效,出了 for 循环代码块 i 就不能再被使用了。
let a = 1; let a = 2; // SyntaxError: Identifier 'a' has already been declared
在这个例子中,同一个代码块内不能重复使用 let 关键字声明同一个变量。
3. const 关键字
使用 const 关键字声明的变量有以下几个特点:
- 只在 const 命令所在的代码块内有效。
- 不存在变量提升。
- 声明变量时必须进行初始化赋值,而且不能再次赋值。
下面是一个使用 const 命令的例子:
const PI = 3.14; PI = 3; // TypeError: Assignment to constant variable.
在这个例子中,使用 const 关键字声明的变量 PI 是一个常量,它的值不能被改变。如果再次赋值会抛出一个 TypeError 错误。
4. 总结
使用 let 和 const 关键字可以声明块级作用域的变量,让我们的程序更加规范和清晰。在使用 let 和 const 关键字时需要注意变量的作用域和赋值行为,避免出现错误。
-- -------------------- ---- ------- -- ----- --- --------- -------- --------------- - --- ---- - - -- - - ---------- - -- ---- - --- ---- - - -- - - ---------- - - - -- ---- - -- ------- - ----- - --- - --- ---- - ------- ------ - ----- - --- ----- - -- - ----- - - - ------ ---- - --- --- - --- -- -- -- --- ----------------------------- -- --- -- -- -- --
在这个例子中,我们使用 let 关键字声明变量 i、j 和 temp,让变量的作用域都在所在的 for 循环代码块内有效;而且由于 let 关键字不允许变量提升,所以需要在循环之前先声明这些变量。这样可以避免变量的作用域冲突和重复声明,使程序更加规范和清晰。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6476b4fe968c7c53b035c073