//1.let命令 用于声明变量,但声明的变量只在代码块内有效
{
let a=1;
var b=2;
}
a;//undefined
b://2
for(let i=0;i<10;i++){
//在块内才有效
}
console.log(i);
//2.for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
for(let i=0;i<3;i++){
let i='abc';
console.log(i);
}
// abc
// abc
// abc
//3.let不存在变量提升
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
//变量foo用var命令声明,会发生变量提升,即脚本开始运行时,变量foo已经存在了,但是没有值,所以会输出undefined。变量bar用let命令声明,不会发生变量提升。这表示在声明它之前,变量bar是不存在的,这时如果用到它,就会抛出一个错误。
//3.暂时性死区
//只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
var tmp=123;
if(true){
tmp='abc';
let=tmp;
}
console