javascript 变量的提升

下面是一个关于全局和局部作用域的问题

var a = 123;

function f(){
   alert(a);
   var a = 1;
   alert(a);  
}

f();

大家第一眼看到后都会认为第一次alert()弹出的结果是123,第二次的alert()的结果是1。

事实上不是这样的,第一次alert的结果是undefined,这是因为函数域优先于全局域,所以局部变量a会覆盖所有与它同名的全局变量,尽管在alert()第一次被调用时,a还没有被正式定义。第二次的结果是1;  

原文地址:https://www.cnblogs.com/WaTa/p/5582388.html