let
1.所声明的变量只在let命令所在的代码块内有效(比如:for循环中传递 i );
2.不存在变量提升,存在暂时性死区(使用let声明变量,只要变量在还没有声明前使用,就会报错);
3.不允许重复声明
块级作用域
1.可以替代立即执行匿名函数(IIFE);
//IIFE写法
(function(){
var tmp = ...;
...
}())
//块级作用域写法
{
let tmp = ...;
...
}
2.允许在块级作用域内声明函数;
3.函数声明类似于var,会提升到全局作用域或函数作用域的头部,也会提升至块级作用域的头部;
4.do表达式....不大清楚啦...
const
1.声明一个只读的常量(不是保证变量的值不得改动,而是保证变量指向的内存地址不得改动),只声明不赋值会报错;
2.作用域与let相同;
3.const常量也不会提升,存在暂时性死区,只在声明后使用;