ES6学习总结之 Let 和 Const

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是个数组,其本身可写,可以添加属性,但是不可以将其指向另一个数组!

 

posted @ 2017-07-14 21:44  百兽凯多  阅读(206)  评论(0编辑  收藏  举报