js里面函数和变量的声明被提升到函数的最顶部
变量可以先使用,再声明
x = 5; // 变量 x 设置为 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x; // 在元素中显示 x
var x; // 声明 x
但是声明时被初始化了的变量不会被提升,例如
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // y 是 undefined
var y = 7; // 初始化 y
js的变量提升(标识符提升)是一个“低劣”的设计,使用中会产生许多困扰,因此es6引入let和const来解决这个问题