# 简介
ECMAscript 6.0,简称ES6。是javascript在ECMAScript 5.0的基础上衍生的下一代标准,于2015年发布。有人称javascript越来越像java了,趋近于强类型语言,大量的关键字被投入使用。现如今最新标准为2018年发布的ES9,随着各大主流浏览器的渐渐支持,ES6的掌握已经变成必要了。
# let 与 const 关键字
let关键字
let关键字用来声明变量,这类似于var,但是用let声明的变量只会在所在的代码块中有效(拥有块级作用域)
{ var a = 10; let b = 20; } console.log(a); //10 console.log(b); //ReferenceError: b is not defined.
上面的例子中,用var关键字声明的a能够在花括号外(块级作用域)正常打印结果,而用let关键字声明的关键字却报引用错误,b找不到。再来看一个经典的案例:
for (var i=0;i<10;i++){ setTimeout(function(){ console.log(i); },1000); } //打印结果:10个10 for (let i=0;i<10;i++){ setTimeout(function(){ console.log(i) },1000); } //打印结果:0,1,2,3,4,5,6,7,8,9
为什么用var关键字声明变量的for循环,最后打印的是10个10?原因很简单,在ES5中,只有全局作用域和函数作用域(局部作用域)两种,所以for循环中所有被执行的setTimeout都指向的是全局的 i ,setTimeout是异步的函数,当执行的时候再回头看 i 已经自增完变成10并且不满足i<10的条件退出了循环。所以第一个for循环指向的就是10,并且打印了10次。