关于es6的IIFE,代码块,let问题

第一张图是前端早读课的
图片描述

第二张是我自己做的测试
图片描述

在前端早读课里的es6文章发现有不明白的地方。说只用代码块和let,就不需要使用IIFE了。但是代码块里面的let报错呀。不解……

第二张的开始let报错,说没有a,后来改成var好了,继续let。好了,迷糊。难道var a的值还能保存?依然不解……请指教

阅读 3.4k
2 个回答

1.测试请用node
2.你定义过了a,当前的作用域当然有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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进