第一张图是前端早读课的
第二张是我自己做的测试
在前端早读课里的es6文章发现有不明白的地方。说只用代码块和let,就不需要使用IIFE了。但是代码块里面的let报错呀。不解……
第二张的开始let报错,说没有a,后来改成var好了,继续let。好了,迷糊。难道var a的值还能保存?依然不解……请指教
第一张图是前端早读课的
第二张是我自己做的测试
在前端早读课里的es6文章发现有不明白的地方。说只用代码块和let,就不需要使用IIFE了。但是代码块里面的let报错呀。不解……
第二张的开始let报错,说没有a,后来改成var好了,继续let。好了,迷糊。难道var a的值还能保存?依然不解……请指教
var 的值不是保存下来,而是变量提升,虽然你看它定义在一个块级作用域里面,但其实在执行代码之前它会将所有的 var 都提升到最顶层代码块里面......
也就说这里的 var 其实是个全局变量,即使你定义在局部作用域它也会被提出去,只不过在未执行到赋值语句之前它的值是 undefined。
let 则是有块级作用域的麻,let 如果没有自己定义局部的 let 那么就用全局定义的 let,局部的 let 能够覆盖掉全局的 let 的,let 还有死区的存在:
let a = 1;
var b = 10;
{
let a = 2;
var b = 11;
console.log(a); // 2 局部
}
console.log(a); // 1
console.log(b); // 11
let b = 1;
{
b; // error 死区
let b = 2;
}
1.测试请用node
2.你定义过了a,当前的作用域当然有a这个值啊。