ES6新增了let指令, 作用是用来声明变量,用法类似于var。
在函数内用var声明时他的作用域为整个函数, 而let声明的变量只在当前代码块中有效。 例子: 文件: 1.let&const.js 0x01
由于用用var声明的变量会声明提前, 所以代码在执行到赋值语句之前使用该变量,代码不会报错,而是会读出undefined。 但let声明的语句不会声明提前,所以这种情况下就会报引用错误
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
由上面第2点提到,由于let没有声明提前, 且它是块级作用域,因此在没执行到声明语句之前,这个变量名彼便无法使用
var tmp = 123;
if(true){
tmp = 'abc'; // 报错
let tmp;
}
let 不允许在相同作用域内重复声明同一个变量
// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}
const声明一个只读的常量。一旦声明,常量的值就不能改变。 因此const一旦声明,就必须立即初始化,不能留到以后赋值。 而且只声明不赋值,就会报错。
const foo; // SyntaxError
-
- const在作用域,变量提升问题上同let一致
-
- 当const的值为引用类型时,它并不能保证内部的值不被修改,只能保证引用地址不变