JavaScript学习笔记

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();
上一篇 下一篇

猜你喜欢

热点阅读