1.ES6局部变量声明,let命令
{
var a = 1;
let b = 2;
}
console.log(b) // 2
console.log(a) // a is not defined
2.不允许在同一作用域内重复声明同一变量。同时在函数内部不能重新声明形参
{
let a = 4;
let a = 6; // 报错
}
function(a){
let a = 6 // 报错
}
3.for循环中的let命令,在for循环中,i只在内部有效,在外部就会报错,在for循环中循环语句是父作用域,循环体是其内部的单独的子作用域,两者是分离的
for (let i = 0; i < 5; i++) {}
console.log(i) // i is not defined
for (var i = 0; i < 5; i++) {}
console.log(i) // 5
var a=[]
for (var i = 0; i < 10; i++) {
a[i]=function(){
console.log(i)
}
}
a[6](); // 10
var a=[]
for (let i = 0; i < 10; i++) {
a[i]=function(){
console.log(i)
}
}
a[6](); // 6
for (let i = 0; i < 5; i++) {
let i = 9;
console.log(i) // 5个9
}
4.let声明的变量不存在变量提升,必须先声明后使用,否则报错。
console.log(b) // b is not defined
let b=2
console.log(b) // undefined
var b=2
5.在代码块内,let必须先声明后使用,同时代码块是局部作用域,独立存在.只要在代码块中存在let或者const,则在声明前使用变量都会报错。语法为‘暂时性死区’
var i = 5;
if(1){
i = 6; // i is not defined
let i;
}
- const声明一个只读的常量,一旦声明无法改变
- const声明时必须同时赋值,即一旦声明必须初始化,否则报错
- const在块级作用域内声明时与let一样,在作用域外无效
- const声明的常量无法重复声明,同时也不会提升