代码示例:
var color = "blue"; // 全局变量 colorfunction changeColor() { console.log(color); var color = "red"; console.log(color);}changeColor();
运行结果为:
undefinedred
在执行函数时,函数内部声明的所有变量都会被隐式移动(或者说提升)到函数最开始的地方,并且被提升的只有变量的声明,而与之相关的赋值操作并不会提升,它还在其原来的位置上,也正因为这一特性,所以出现了与我们预期不符的结果。而实际上以上代码等同于如下代码:
var color = "blue"; // 全局变量 colorfunction changeColor() { var color; // 将局部变量 color 声明放到函数开始地方 console.log(color); color = "red"; // 对局部变量 color 进行赋值 console.log(color);}changeColor();
运行结果为:
undefinedred
参考书籍:《JavaScript面向对象编程指南》