变量提升和函数提升

写程序时,无论是变量还是函数,我们都是先声明后使用,其实也应该是这样来写。

但有时候我们将两者的顺序颠倒了,先使用了变量或先调用了函数,再来声明变量或函数,发现竟然也没报错。

其实这也是因为JavaScript在执行代码之前,已经将变量声明和函数声明都放到内存中了,到了执行阶段程序就可以从内存中读取变量和函数的定义了。

1
2
3
num = 6;
num + 7;
var num; // num为13
1
2
3
4
5
func("hello");

function func(str) {
console.log(str); // 输出hello
}

需要注意的一点是:JavaScript只提升声明,不提升初始化。

1
2
3
var x = 1;                 
console.log(x, y); // 这里y是undefined,因为下面的y不仅仅是声明,是声明并初始化
var y = 2;