- let 声明的是变量,类似于var,但是这个只在代码块中有效。
if(true){
var a = 2;
let b = 3;
}
document.write(a);
document.write(b); // 报错:ReferenceError: b is not defined
- const 声明的是常量,一旦声明,值将是不可变的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<header>
<!-- 加载Traceur编译器 -->
<script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script>
<!-- 将Traceur编译器用于网页 -->
<script src="http://google.github.io/traceur-compiler/src/bootstrap.js" type="text/javascript"></script>
<!-- 打开实验选项,否则有些特性可能编译不成功 -->
<script>
traceur.options.experimental = true;
</script>
<script type="module">
// let命令
if(true){
var a = 2;
let b = 3;
}
document.write(a);
document.write(b); // 报错:ReferenceError: b is not defined
// const命令
const PI = 3.1415;
PI // 3.1415
PI = 3;
PI // 3.1415
const PI = 3.1;
PI // 3.1415
</script>
</header>
</head>
<body>
</body>
</html>
- const 具有块级作用域
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<header>
<!-- 加载Traceur编译器 -->
<script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script>
<!-- 将Traceur编译器用于网页 -->
<script src="http://google.github.io/traceur-compiler/src/bootstrap.js" type="text/javascript"></script>
<!-- 打开实验选项,否则有些特性可能编译不成功 -->
<script>
traceur.options.experimental = true;
</script>
<script type="module">
if (true) {
const max = 5;
}
document.write(max); // ReferenceError 常量MAX在此处不可得
</script>
</header>
</head>
<body>
</body>
</html>
- const 不可重复声明
var message = "Hello!";
let age = 25;
// 以下两行都会报错
const message = "Goodbye!";
const age = 30;
tip:const
指令指向变量所在的地址,所以对该变量进行属性设置是可行的(未改变变量地址),如果想完全不可变化(包括属性),那么可以使用冻结。代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<header>
<!-- 加载Traceur编译器 -->
<script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script>
<!-- 将Traceur编译器用于网页 -->
<script src="http://google.github.io/traceur-compiler/src/bootstrap.js" type="text/javascript"></script>
<!-- 打开实验选项,否则有些特性可能编译不成功 -->
<!-- <script>
traceur.options.experimental = true;
</script> -->
<script type="module">
const C1 = {};
C1.a = 1;
document.write(C1.a); // 1
// C1 = {}; // 报错 重新赋值,地址改变
//冻结对象,此时前面用不用const都是一个效果
const C2 = Object.freeze({});
C2.a = 1; //Error,对象不可扩展
document.write(C2.a);
</script>
</header>
</head>
<body>
</body>
</html>