JS变量提升

代码示例:

var color = "blue";        // 全局变量 color
function changeColor() {
    console.log(color);
    var color = "red";
    console.log(color);
}

changeColor();

运行结果为:

​undefined
red

在执行函数时,函数内部声明的所有变量都会被隐式移动(或者说提升)到函数最开始的地方,并且被提升的只有变量的声明,而与之相关的赋值操作并不会提升,它还在其原来的位置上,也正因为这一特性,所以出现了与我们预期不符的结果。而实际上以上代码等同于如下代码:

var color = "blue";        // 全局变量 color
function changeColor() {
    var color;        // 将局部变量 color 声明放到函数开始地方
    console.log(color);
    color = "red";    // 对局部变量 color 进行赋值
    console.log(color);
}

changeColor();

运行结果为:

​undefined
red

 

参考书籍:《JavaScript面向对象编程指南》

posted @ 2019-07-19 06:58  d0usr  阅读(168)  评论(0编辑  收藏  举报