ES6新增关键字let和const,用来定义变量;
1,关键字let的特点:声明块级作用域变量;不允许多次声明同一个变量;不存在变量声明提升;块级作用域下使用let或const命令或形成一个作用域封闭去(暂时性死区)即不允许变量在声明前使用;for语句上声明的变量与上一次声明的变量不是同一个,即for语句上声明的变量是局部变量,不是全局变量;
let关键字的使用:
//不能重复定义同一个变量---------
var hello = 'hixi';
var hello = 'ed';
let test = 'for test';
let test = 'hello'; //Script snippet %234:4 Uncaught SyntaxError:
//Identifier 'test' has already been declared
//在for语句上的变量声明;let声明的i是个作用于for块级的变量,每次遍历,i都是一个新的遍历-------
//执行完for的块级代码后变量i会被销毁,但是它被setTimeout的回调函数引用,因此变量i还保存在内存中
//这相当于闭包函数;
//for(var i = 0; i< 3; i++){
// (function(i){
// //i被闭包引用,i按现在的值被保存在内存中,直到在引用的代码逻辑执行完毕
// setTimeout(()=> console.log(i), 1);
// })(i);
//}
for(let i = 0; i< 3; i++){
//块级作用域,每次执行