在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分函数声明才存在函数提升var num = 20;function test(){ console.log(num); // 20 num = 10; //去掉了var 就变成定义了全局变量了 console.log(num); // 10}test();console.log(num); // 10外面的是全局的。里面的可以访问它,里面定义的在输出后面,且不能变量提升。所以,就输出外面的20了