var
//声明变量
let a;
// or
let b, c, d;
// or
let e = [];
声明变量的特性
- 变量不能重复声明
<script>let name = "张三"; let name = "李四";</script>
Uncaught SyntaxError: Identifier 'name' has already been declared
未捕获的语法错误:已声明标识符“name”
- 块级作用域
在 es5 中有三种作用域,分别是全局,函数,eval(严格模式开启)
<script>
// let name = "张三";
// let name = "李四";
{
let boy = "王五";
}
console.log("boy", boy);
</script>
3. 不存在变量提升
console.log("name", name);
// var name = "张三";
let name = "张三";
4.不影响作用域链
let name = "张三";
function fn() {
console.log("name", name);
}
fn();
用let申明,但是不影响作用域效果,调fn函数,在fn内部输出name,由于函数作用域中没有,就沿着作用域链上一级找,就可以找到。
const
- 声明常量
const name = "张三";
- 一定要赋初始值
const a;
// Uncaught SyntaxError: Missing initializer in const declaration
一般常量使用大写
const AGE = 12;
- 常量不能修改
const b = 1;
const b = 2;
// Uncaught SyntaxError: Identifier 'b' has already been declared
- 对于数组和对象的元素修改,不算做对常量的修改,不会报错
const list = ["张三", "李四"];
list.push("王五");
// list (3) ['张三', '李四', '王五']
虽然数组元素发生改变,但是 list 常量指向的地址没有发生改变。