JavaScript学习笔记2_变量提升及作用域问题
2019-11-10 本文已影响0人
菜出意料
变量提升
JavaScript在运行时会将变量的声明提升到函数或全局的最顶部。通过代码解释。
直接使用不存在的变量,会得到错误提示
console.log(aa);
image.png
如下代码将不会得到错误提示,而是得到"undefined"
console.log(aa);
var aa;
image.png
在JavaScript运行时会将var aa提升到console.log(aa)的前面执行,由于变量没有初始化,所以得到undefined
console.log(bb);
var bb = 1;
console.log(bb);
image.png
变量提升,仅将变量的声明提升,而变量的初始化仍在原来位置,所以上面的代码在执行时变为如下所示:
var bb;
console.log(bb);
bb = 1;
console.log(bb);
image.png
代码片段
var a = 123;
function f() {
console.log(a);
var a = 1;
console.log(a);
}
f();
输出结果
我们会认为应该先打印123,然后再打印1,但是由于变量提升的原因,导致函数f内的a变量位置提升,并覆盖全局变量a,实际执行代码如下:
var a = 123;
function f() {
var a;
console.log(a);
a = 1;
console.log(a);
}
f();