JS高程紅寶讀書筆記01 - 在html中使用javascript

在html中使用javascript

1.內嵌式:

一般在<body>標簽的尾部添加<script>標簽,并且指定type="text/javascript"
比如這樣:

<html>
    <head>
    </head>
    <body>
        <!--內容-->
        <script type="text/javascript">
            console.log('Tag should be here');
        </scipt>
    <body>
</html>

這樣的好處是:

  1. 避免腳本加載阻塞文檔渲染
  2. 避免腳本操作DOM時文檔流未渲染完畢導致獲取DOM元素失敗。

看個例子:

<html>
    <head>
        <script type = "text/javascript">
                let btn = document.getElementsByTagName('button')[0];
                // do sth with btn
                // error 
        </script>
    </head>
    <body>
        <!-- content here -->
                <button>按鈕</button>
    </body>
</html>

報錯:


原因是先加載了腳本內的內容,而此時文檔流未渲染,并沒有<button>標簽存在,所以獲取button得到的結果為undefined.

解決辦法
將script里的內容放置到window.onload{ }里,在文檔加載完成后會觸發load事件。此時,在文檔中的所有對象都在DOM中,所有圖片,腳本,鏈接以及子框都完成了加載。

2.外部引入

外部引入JS腳本文件作為最佳實踐,src作為外部引入資源的重要屬性,用來指定外部資源的引入路徑,可以是相對路徑,也可以是絕對路徑:

<html>
    <head>
        <script type = "text/javascript" src="js/相對路徑.js"></script>
        <script type = "text/javascript" src="desktop/example/js/絕對路徑.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

同樣,如同嵌入式JS一樣,外部引入JS同樣也需要考慮使得文檔流優先加載的問題。

延遲腳本

使用defer表明外部引入的腳本將按照它們出現的順序先后執行,也就是說先出現的腳本會先執行,然后再到后者。但是在現實里,延遲腳本不一定會按照順序執行,也不一定會在DOMContentLoaded事件觸發前執行,因此最好只包含一個延遲腳本。(順序得不到保障,無法保證預期效果,容易出錯)

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我會先執行.js"></script>
        <script type="text/javascript" defer="defer" src="我會后執行.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

異步腳本

async表示瀏覽器立即下載物件,但是不保證執行先后順序,指定為async的目的是不讓頁面等待兩個腳本的下載和執行,從而可以異步加載頁面其他內容。所以設為async的腳本最好不要進行dom操作,否則有可能出現加載頁面時出現錯誤。

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我不一定第二個執行.js"></script>
        <script type="text/javascript" defer="defer" src="我不一定第二個執行.js"></script>
    </head>
    <body>
        <!-- 我不會等待兩個腳本文件的加載,我會直接進行頁面渲染 -->
    </body>
</html>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 簡單介紹JavaScript的發展歷史 JavaScript因互聯網而生,回顧它的歷史要從瀏覽器的歷史講起。 19...
    _Dot912閱讀 512評論 0 3
  • 1. CSS和JS在網頁中的放置順序是怎樣的? css放在head標簽內,防止渲染時出現白屏 js放在最后body...
    billa_8f6b閱讀 587評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,373評論 25 708
  • 1、耶和華啊!我的敵人何其加增,有許多人起來攻擊我; 2、有許多人議論我說:“他得不著神的幫助。” 3、但你耶和華...
    我在天上有個家閱讀 1,597評論 0 0
  • 春天的那把傘 收納了晶瑩、柔和的春雨 滋潤了萬物 蘇醒了沉睡的大地 夏天的那把傘 抵擋了酷熱、強烈的夏日 帶來了涼...
    幽蘭33閱讀 325評論 0 4