1、变量在声明前调用,为什么var 不会报错,let 会报错?
var 定义变量的时候,js是首先直接把变量声明到作用域的最顶部的,所以这个时候,全局都能找到这个变量
所以在定义之前调用这个变量,是不会报错的。所以为了纠正这个问题,在ES 提出了let 这个解决方案。
let 是必须先声明,然后才可以引用的,否则程序会中断,不会继续往下进行。
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
2、什么是变量提升?
用个最简单的例子来说明一下:这个例子的左边代码是全等于右边的代码的。
这就解释了var 定义变量的时候,js是首先直接把变量声明到作用域的最顶部的原因了。