JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)
1.没有声明 (var),直接输出;
console.log(a);
结果为报错Uncaught ReferenceError: a is not defined
2.在输出语句之后,var声明变量;
console.log(a);var a;
结果为undefined
,没有报错;
3.在输出语句之后,var声明变量并赋值;
console.log(a);var a=1;
结果也为undefined
,没有报错;
2和3例子对比证明,js变量提升只会输出undefined,不能获取变量的值;
4.在输出语句之后,不用var声明变量;
console.log(a);a;
结果为报错Uncaught ReferenceError: a is not defined
2和4例子对比证明,js变量提升仅限有用var声明的变量;
来源: