2011-11-16 41 views
5

我知道JS在執行代碼之前會對函數進行預編譯。所以函數順序無關緊要。但是,鏈接* .js文件時,函數順序會變成問題。功能命令何時重要?

例如,

<script src="@Url.Content("~/Scripts/Personal/MyJScript.js")" type="text/javascript"></script> 


<script type="text/javascript"> 
    $(document).ready(function() { 
     hello(); 
     afterCall(); 
     hello2(); //fails, defined in MyJScript2.js 

    }); 

    function afterCall() { 
     alert('inline function defined after call'); 
    } 
</script> 

<script src="@Url.Content("~/Scripts/Personal/MyJScript2.js")" type="text/javascript"></script> 

在上面的代碼中,函數hello2()在呼叫被定義之後被鏈接文件中定義。通話失敗。所以,直覺上我假設在這種情況下功能命令確實是

考慮到我執行$(document).ready,文檔應該儘可能地準備好。那麼,爲什麼會發生?


按照要求,這裏是客戶端HTML

<body> 
    <script src="/Scripts/Personal/MyJScript.js" type="text/javascript"></script> 


<script type="text/javascript"> 
    $(document).ready(function() { 
     hello(); 
     afterCall(); 
     hello2(); //fails 

    }); 

    function afterCall() { 
     alert('inline function defined after call'); 
    } 
</script> 

<script src="/Scripts/Personal/MyJScript2.js" type="text/javascript"></script> 

</body> 
+0

凡在你的整個HTML做那些'

0

在體內腳本標記可能會被執行(或儘量)爲外部JS文件的其他請求已完成之前。

這不是一個函數聲明順序比載入順序和時間的問題。

0

而不是使用腳本標記導入MyJscript2的,你可以使用getScript搶劇本,並在成功回調執行某些功能。