ES6 新增加了两个重要的JavaScript 关键字: let 和 const
let 声明的变量只在let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
全局变量
<script type="text/javascript">var carName = "Volvo";console.log(carName);// 这里可以使用 carName 变量function myFunction() {// 这里也可以使用 carName 变量console.log(carName)};myFunction()</script>
结果:
Volvo
Volvo
局部变量
<script type="text/javascript">
function myFunction() {
var carName = "华为"
// 这里也可以使用 carName 变量
console.log(carName)
};
myFunction()
console.log(carName);
// 这里可以使用 carName 变量
</script>
结果:
华为
index.html:18 Uncaught ReferenceError: carName is not defined
at index.html:18
JavaScript 块级作用域(Block Scope)
使用var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。
<script type="text/javascript">
{
var x = 2;
}
// 这里可以使用 x 变量
console.log(x)
</script>
在ES6 之前,是没有块级作用域的概念的。
ES6 可以使用let 关键字来实现块级作用域。
let 声明的变量只在let 命令所在的代码块 {} 内有效,在 {} 之外不能访问
var x = 10;
// 这里输出 x 为 10
{
var x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 2
let 关键字就可以解决这个问题,因为它只在let 命令所在的代码块 {} 内有效。
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10
const
<script type="text/javascript">
const x = 10;
x = 100
document.write(x)
</script>
如上我们会发现报错
index.html:11 Uncaught TypeError: Assignment to constant variable.
at index.html:11
