!!!请先看阮一峰es6关于这部分的讲解,如const和let相同的5大特性,let举例了,const就没有,是一样的效果,我就省略了,var那块的例子也不多,但在let那里能找到,我不喜欢写很长篇幅的博客。
let
- 声明的变量只在它所在的代码块有效;
- 变量不会提升(意味着所有变量都需要先声明后使用,否则会报错)
- 暂时性死区(块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不再受外部影响)
- 不可重复声明
- 在全局声明,但不是全局对象的属性;
for (let i = 0; i < 10; i++) {
console.log(i);
}
console.log(i); // 报错 i is not defined
for (var j = 0; j < 10; j++) {
console.log(j);
}
console.log(j); //10
//----------------------------
var tmp = 123;
if (true) {
tmp = 'abc'; // 这里报错 tmp not defined
let tmp;
console.log(tmp);
}
// ----------------------
console.log(foo); // undefined
var foo = 2;
console.log(bar); // 报错
let bar = 2;
//----------------------
let a = 1;
let a = 1;// 报错 Identifier 'a' has already been declared
var a = 1;
let a = 1; // 报错 Identifier 'a' has already been declared
const a = 1;
let a = 1; // 报错 Identifier 'a' has already been declared
//------------------------
let a = 1;
console.log(window.a); // undefined
var
- 全局变量
- 变量提升
- 可重复声明
var a = 1;
var a = 2; // 可执行
let b = 1;
var b = 1; // 报错 Identifier 'b' has already been declared
const c = 1;
var c = 1; // 报错 Identifier 'c' has already been declared
const
- 和let一样(5大特性)
- const 声明一个只读的常量,一旦声明,常量的值就不允许改变。 const 一旦声明了变量,就必须初始化,不能留到以后赋值。如果使用const声明一个变量,但是不赋值,也会报错;
- 注意:对于对象和数组来说,他们指向的地址是一样的,是可以改变的
const a; // 报错 Missing initializer in const declaration
//------------------------
const a = 1;
a = 2; //报错 Assignment to constant variable.
console.log(a);
//--------------------
const a33 = [];
a33.push('Hello'); // 可执行
a33.length = 0; // 可执行
这里的解释先到这里,接下来想写几道关于var 、let、const的题目,应该是在另一篇博客里了