鏈接:https://zhuanlan.zhihu.com/p/22606894
var bar=1;
function test(){
console.log(bar); //undeifned
var bar=2;
console.log(bar); //2
}
test();
爲什麼在test函數中會出現上述結果呢,這就是JavaScript的變量提升了,雖然變量bar的定義在後面,不過瀏覽器在解析的時候,會把變量的定義放到最前面,上面的test函數相當於
function test(){
var bar;
console.log(bar); //undefined
bar=2;
console.log(bar); //2
}
再看
var foo=function(){ console.log(1); }
function foo(){ console.log(2); }
foo(); //結果爲1
同樣的,函數的定義也會到提升到最前面,上面的代碼相當於
function foo(){ console.log(2); }
var foo;
foo=funciton(){ console.log(1); }
foo(); //1
這裏爲什麼不是下面的理解方式呢?
var foo;
function foo(){ console.log(2);}
foo=function(){ console.log(1);}
foo();//1