es6 块级作用域

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后 程序在这里报错了?


qq_花开花谢_0
浏览 647回答 2
2回答

天涯尽头无女友

因为你用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就没有这个概念,你引用了未定义变量当然就报错了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript