let命令
- let命令用来定义变量,其定义的变量只在代码块内有效
而var定义的变量在全局范围内都有效
{
var p=2;
let a = 1;
}
p // 2
a // ReferenceError
- let命令没有变量提升
若在定义一个变量之前使用该变量则会抛出 ReferenceError 错误
而var则会将该变量视为 undefined
p = 3;
let p; // ReferenceError
console.log(a); // 输出undefined
var a = 2;
(这个特性会迫使程序猿们养成先定义后使用的习惯, 同时避免var的 undefined 产生难以查找的错误)

- let不允许重复声明同一变量
{
var a;
let a; // error
}
{
let a=1;
let a; //error
}
const命令
- const用来声明一个只读的常量, 一旦声明,常量的值不可改变
声明时必须初始化,否则会报错
const a = 1;
a = 5; //TypeError: Assignment to constant variable.
const p; //SyntaxError: Missing initializer in const declaration
- const 只在声明其所在的块级作用域内有效
- const 命令声明的常量也没有变量提升,只能在声明的位置后面使用
- 同样不可重复声明同一变量
注意:
对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变
const a = [];
a.push('Java'); // 可运行 此时a为['Java']
a = ['script']; // error
块级作用域的优点
- 避免内层变量覆盖外层变量
- 避免用来计数的循环变量泄露为全局变量
-
引入了块级作用域,允许在块级作用域之中声明函数
so
const 和 let 用起来
网友评论