2013-06-19 31 views
2
<script> 
function foo(){ 
    function bar() { 
     return 3; 
    } 
    return bar(); 
    function bar() { 
     return 8; 
    } 
} 
alert(foo()); 
</script> 

問:問題與JS的功能正在運行的進程

結果顯示:8,爲什麼不是3,當腳本運行到這一行:return bar();應該跳出function foo(){},也不會達到線下面它,這是

function bar() { 
    return 8; 
} 

對不對?

回答

2

這些功能定義hoisted,也就是說,它們出現在源順序,只有他們像他們都拉到他們所定義的範圍的頂部。

知道這一點後,你可以告訴第二個破壞了第一個定義。