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>
凡在你的整個HTML做那些'
在體內腳本標記可能會被執行(或儘量)爲外部JS文件的其他請求已完成之前。
這不是一個函數聲明順序比載入順序和時間的問題。
來源
2011-11-16 20:16:28
而不是使用腳本標記導入MyJscript2的,你可以使用getScript搶劇本,並在成功回調執行某些功能。
來源
2011-11-16 20:50:02 jbabey