ES6-let

      ES6作为2015年发布的ECMAScript的标准,如今各大游览器对ES6的支持度越来越高,在随着JS的热门度地不断上升,感觉这门语言在不久的未来将会成为一个企业级开发语言。最近正好比较空,学习了一下ES6,先在这里做个笔记,以便之后查阅。

  

let命令

1.什么是let命令  

类似var,用来声明变量

2.为什么需要let命令

ES5有两个作用域:全局作用域和函数作用域。然而没有块级作用域,变量会被污染。

var tmp = new Date();

function f() {
   console.log(tmp);    
//由于var命令使得变量提升,这里的tmp变量函数作用域下的tmp,而该作用域下的tmp未赋值。
   if (false) {
   var tmp = 'hello world';
   }
}

f(); // undefined                          

 

let命令为JS增加了块级作用域

let tmp = 1;
function f() {
    console.log(tmp);    
    if (false) {
       let tmp = 'hello world';   
       //该tmp存在于if的块级作用域中,不会影响外部的tmp变量
     }
  }

f(); //1    

 

3.let与var区别

let不存在变量提升

// var 的情况
console.log(foo); // undefined
var foo = 2;

// let 的情况
console.log(bar); // ReferenceError
let bar = 2;

在块级作用域中存在let命令,在该作用域的变量不会受外部影响

// var 的情况
var tmp = 1; if(true){ console.log(tmp); //1 var tmp = 2; }

// let 的情况
let tmp = 1; if(true){ console.log(tmp); //ReferenceError let tmp = 2; }

let不允许重复声明

// 能重复声明(a=1)
 var f=function(){
  var a = 10;
  var a = 1;
 
}


// 报错 (Uncaught SyntaxError: Identifier 'a' has already been declared)
var f=function(){
  let a = 10;
  let a = 1;
 
}

// 报错(Uncaught SyntaxError: Identifier 'a' has already been declared)
var f=function(){
  var a = 10;
  let a = 1;
 
}

 

posted @ 2017-07-15 16:12  teletubbies  阅读(124)  评论(0编辑  收藏  举报