2014-01-30 70 views
0

請考慮下面的代碼片段:在JavaScript是腳本guarantied文檔中先前的腳本後運行完成運行

<!DOCTYPE html> 
<html> 
<head> 
    <script src="script_1.js"></script> 
    <script src="script_2.js"></script> 
</head> 
<body> 
    <script> 
     //script_3 
    </script> 
</body> 
</html> 

一個可以肯定的說script_3script_1後運行,並且script_2完成執行和script_2只有在script_1完成後才運行c,前提條件是script_1script_2中沒有異步代碼?

因爲現在我有一種情況,script_3時不時script_2完成之前開始,似乎所有的腳本沒有任何異步代碼。但我不能用更簡單的例子來重現這種情況。

謝謝。

+2

是的,因爲代碼沒有'defer'或其他任何東西,所以腳本保證在所有瀏覽器中按順序運行。 – adeneo

+0

*看起來如何*沒有異步代碼?如果你可以發佈他們的內容,即使你不能減少示例代碼,它也會很好。 – Bergi

+0

@Bergi,我不能在這裏發佈代碼。第一個原因是它比較大,第二個是我不允許透露這個代碼。現在,在答案之後,我認爲這些文件有一些異步代碼,我現在只是沒有發現它。 – user907860

回答

2

一個可以肯定的說script_3只運行後script_1和script_2完成執行並script_2c只運行後script_1完成,只要有在script_1和script_2沒有異步代碼?

是的,只要沒有任何腳本標記使用async or defer attributes

注意,這是從這個非常不同,但是:

<script src="script1.js"></script> 
<script src="script3.js"></script> 

...其中script1.js包含此:

var script = document.createElement('script'); 
script.src = "script2.js"; 
document.getElementsByTagName('script')[0].parentNode.appendChild(script); 

...在這種情況下script2.jsscript3.js的順序是混亂的。

然而,如果使用script1.jsdocument.write輸出script2.js腳本標籤,這將是像標記版本,並順序將保證(1,然後如圖2所示,然後3)。