搜尋
首頁web前端js教程Javascript程式碼在頁面載入時的執行順序介紹_基礎知識

一、在HTML中嵌入Javasript的方法
1.直接在Javascript程式碼放在標記對<script>和</script>之間
2.由<script></script>標記的src屬性制定外部的js檔案
3.放在事件處理程序中,例如:

點擊我


4.作為URL的主體,這個URL使用特殊的Javascript:協議,例如:點擊我
5.利用javascript本身的document.write()方法寫入新的javascript程式碼
6.利用Ajax非同步取得javascript程式碼,然後執行
 

第3種和第4種方法寫入的Javascript需要觸發才能執行,所以除非特別設置,否則頁面載入時不會執行。

二、Javascript在頁面的執行順序
1.頁面上的Javascript程式碼是HTML文件的一部分,所以Javascript在頁面裝載時執行的順序就是其引入標記<script></script>的出現順序, <script></script>標記裡面的或透過src引入的外部JS,都是按照其語句出現的順序執行,而且執行過程是文件裝載的一部分。
2.每個腳本定義的全域變數和函數,都可以被後面執行的腳本所呼叫。
3.變數的調用,必須是前面已經聲明,否則獲取的變數值是undefined。

複製程式碼 程式碼如下:



4.同一段腳本,函數定義可以出現在函數呼叫的後面,但是如果是分別在兩段程式碼,且函數呼叫在第一段程式碼中,則會報函數未定義錯誤。
複製程式碼 程式碼如下:




5.document.write ()會把輸出寫入到腳本文件所在的位置,瀏覽器解析完documemt.write()所在文件內容後,繼續解析document.write()輸出的內容,然後在繼續解析HTML文件。
複製程式碼 程式碼如下:

');
    document.write('');
    //]]>
 

test.js的內容是:
複製代碼 程式碼如下:

var tmpStr = 1;
alert(tmpStr);

•在Firefox和Opera中的彈出值的順序是:1 、2、我是1、3
•在IE中彈出值的順序是:2、1、3,同時瀏覽器報錯:tmpStr未定義
原因可能是IE在document.write時,並未等待載入SRC中的Javascript程式碼完畢後,才執行下一行,所以導致2先彈出,執行到document.write('document.write("我是" tmpStr)')呼叫tmpStr時,tmpStr並未定義,從而報錯。

解決這個問題,可以利用HTML解析是解析完一個HTML標籤,再執行下一個的原理,把程式碼拆分來實現:

複製程式碼 程式碼如下:


  ');
    //]]>
 

這樣IE下和其他瀏覽器輸出值的順序都是一直的了:1、2、我是1、3。

三、如何改變Javascript在頁面的執行順序
1.利用onload

複製程式碼 程式碼如下:



輸出值順序是2、1。

要注意的是,如果存在多個winodws.onload的話,只有最有一個生效,解決這個辦法是:

複製程式碼 程式碼如下:

window.onload = function(){f();f1();f2();.....}

利用2級DOM事件類型
複製程式碼 程式碼如下:

if(document. ){
window.addEventListener('load',f,false);
window.addEventListener('load',f1,false);
...
}else{
window .attachEvent('onload',f);
window.attachEvent('onload',f1);
...
}

2.IE中可以利用defer ,defer作用是把程式碼載入下來,並不立即執行,等文件裝載完畢之後再執行,有點類似window.onload,但是沒有window.onload那樣的局限性,可以重複使用,但是只在IE中有效,所以上面的範例可以修改成為
複製程式碼 程式碼如下:

');
document.write( '');
//]]>


這樣IE就不報錯了,輸出值的順序變成:1、3、2、我是1

當HTML解析器遇到一個腳本,它必須依照常規終止對文件的解析並等待腳本執行。為了解決這個問題HTML4標準定義了defer。透過defer來提示瀏覽器可以繼續解析HTML文檔,並延遲執行腳本。這種延遲在腳本從外部文件載入時非常有用,讓瀏覽器不必等待外部文件全部載入之後才繼續執行,能有效的提高效能。 IE是目前唯一支援defer屬性的瀏覽器,但IE並沒有正確的實作了defer屬性,因為延遲的腳本總是被延遲,直到文件結束,而不是只延遲到下一個非延遲的腳本。這意味著,IE中延遲的腳本的執行順序相當混亂,並且不能定義任何後面非延遲腳本並須的函數和變數。在IE中所有的defer的腳本執行時間應該都是HTML文檔樹建立以後,window.onload之前。

3.利用Ajax。
因為xmlhttpRequest能判斷外部文件載入的狀態,所以能夠改變程式碼的載入順序

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具