最近要用vue做一个后台管理项目,顺带学习es6
1. let和const
let和var不同,不存在变量提升
let所声明的变量只在块级代码中有效
let比较令人惊讶的地方
for循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。
for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i);}// abc// abc// abc
函数内部的i和外部的i是分离的
暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp = 123;if (true) { tmp = 'abc'; // ReferenceError let tmp;}
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
ES6中有了块级作用域
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5}
do表达式 -- 获得块级作用域操作的返回值
let x = do { let t = f(); t * t + 1;};