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就没有这个概念,你引用了未定义变量当然就报错了。
添加回答
举报
0/150
提交
取消