function fn() {
var a = 10;
console.log(b)
var b = 20
}
fn()
为什么以上代码输入undefined,把var b 换成let b就报错
function fn() {
var a = 10;
console.log(b)
var b = 20
}
fn()
为什么以上代码输入undefined,把var b 换成let b就报错
js 中 var 会使变量提升,也就是会跑到最前面,如果是在函数里面,就跑到函数最前面(示例 a 旁边),就相当于比示例 console.log 先了定义,所以能输出。而换成 let 则不会提升,在哪个位置定义就在哪个位置,所以会输出未定义
var会在他的作用域内进行变量提升,而let不会。你的代码其实可以这样写:
function fn() {
var a;
var b;
a = 10;
console.log(b);
b = 20;
}
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答868 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
用var声明变量的时候,会有变量声明提升的效果,也就是实际上变量b在函数内顶部已经被声明,但此时还没有被赋值,所以是undefined;
用let声明变量的时候,不具有变量声明提升的效果,所以报错了。