javascript高級程序設計學習記錄之defer和async屬性區別

1. 因爲解釋器在解析執行js代碼期間會阻塞該javascript便籤後面的的渲染 舉個簡單的例子:javascript

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script type="text/javascript">
    var test=document.getElementById('test');
    console.log(test)
</script>
</html>
<body>
<div id="test"> zhanhui</div>
</body>

控制檯輸出null

2.沒有defer或者async屬性,瀏覽器會當即加載並執行相應的js腳本,這樣就會影響後續的文檔內容的渲染加載html

3.有async屬性,後續頁面的一些操做(例如文檔的加載和渲染)是和js腳本加載執行是並行的,js高級編程設計中說道,當即下載該js腳本而且加載完成就執行,不考慮依賴,但不妨礙頁面的其餘操做,而且只對外部腳本有效java

4.有defer,當即下載該js可是會等到HTML文檔被徹底加載和解析完成以後執行,執行的順序也是按照加載的順序(當即下載,但延時執行)編程

另外還有幾個小知識點: 一、帶有src屬性的script元素不該該在其標籤之間在包含js代碼,若是有,則只會下載並執行外部js,嵌入的js則會被忽略瀏覽器

二、瀏覽器在遇到body標籤時纔開始呈現內容,因此咱們將script標籤放在body標籤內容的後面也就是</body>以前async

相關文章
相關標籤/搜索