为了账号安全,请及时绑定邮箱和手机立即绑定

es6 块级作用域

es6 块级作用域

qq_花开花谢_0 2018-09-01 20:31:03
es6 块级作用域let在下面代码中为什么不加上let a = 2000 这句话,console.log(a) 结果是 100;而加上这句后为什么会报错a为定义。我是在学习es6中let的知识点是遇到的。var a = 100, b = 10; function fun(){    if(true){         console.log(a);         let a = 2000;     } }fun();// 请把代码文本粘贴到下方(请勿用图片代替代码)如果是if里面是var a =200;那么console.log(a)的结果是undefined,为什么换成let后 程序在这里报错了?
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

因为你用var会有个变量提升 var hoisting,所以不会报错。
源代码

function fun() {  if (true) {
    console.log(a);    var a = 2000;
  }
}

变量提升后等于是这样

function fun() {  var a;  if (true) {
    console.log(a);
    a = 2000;
  }
}

而用let就没有这个概念,你引用了未定义变量当然就报错了。


查看完整回答
反对 回复 2018-09-01
  • 2 回答
  • 0 关注
  • 646 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信