let和const命令
1.let命令
(1)基本用法
let和var一样拥有声明·变量,但是let声明的变量只在let命令所在的代码块内有效
{ let a=5; var b=10; } a // ReferenceError: a is not defined b // 10
可以看到代码块中let声明的a在代码块之外是undefined.
这里可以注意下,let声明在for循环中会 很有用
var a=[]; for(var i=0;i<5;i++){ a[i]=function(){ console.log(i); } } a[2]() //5 var a=[]; for(let i=0;i<5;i++){ a[i]=function(){ console.log(i); } } a[2]() //2
从上面可以看出,let声明的变量只在当轮循环的代码块中有效,所以每次循环的i都是新变量,而对于var声明的i,由于是全局的,所以每次循环都会被新值覆盖,使得输出的是最后一轮的i值
(2)let不存在变量提升
console.log(a); //ReferenceError let a=2;
let声明的变量一定要先声明后使用
(2)let不允许重复声明
//报错
function(){
let a=2;
let a=3;
}
//报错
function(){
let a=2;
var a=3;
}
//报错
function(a){
let a=2;
}
//不会报错
function(a){
{
let a=5;
}
}
let不可以在同一作用域反复声明
2.const命令
关于const命令,有以下几个重点:
1.const用来声明常量,一旦声明,不可以更改其值
2.const和 let一样,声明只在所在的块级作用域内有效
3.const声明的常量也不提升,只能先声明后使用
4.和let一样,const也不可以重复声明
关于const声明的 常量,有一个注意点,如下
const con={}; con.prop=2223; con.prop //2223 con={} // TypeError: "con" is read-only
当const声明的常量是引用类型时,常量名指向数据所在的地址,const命令只是保证常量名指向的地址不变,并不保证该地址的数据不变!
再看一个例子:
const arr=[]; arr.push("你好呀") ; //不报错 arr.length=2; //不报错 arr=["吃了吗"]; //报错
const声明的arr是个数组,其本身可写,可以添加属性,但是不可以将其指向另一个数组!