html文件里引用js文件一般放在什么位置才是最適合攀唯?

  • 題目:
    放在HTML里的哪一部分JavaScripts會在頁面加載的時候被執(zhí)行侯嘀?
    A. 文件頭部位置
    B. 文件尾
    C .<head>標簽部分
    D .<body>標簽部分

想要知道js文件在html中的加載解析執(zhí)行情況?首先必須要先清晰了解——DOM文檔加載步驟

DOM文檔加載步驟:

  1. 解析html結(jié)構(gòu);
  2. 加載外部腳本和樣式表文件碟嘴;
  3. 解析并執(zhí)行腳本;
  4. dom樹構(gòu)建完成(觸發(fā)DOMContentLoaded和 jquery ready事件)错沃;
  5. 加載圖片等外部文件;(會觸發(fā)圖片load事件)
  6. 頁面加載完畢玉掸。(觸發(fā)load事件)

注意:凡是沒有綁定加載事件(如:window.onload醒叁、$(document).ready())的js文件中的代碼把沼,在本文件(代碼)加載完成后立即解析執(zhí)行

js可以由于內(nèi)外部饮睬、是否由綁定加載事件(如:load捆愁、ready)觸發(fā)執(zhí)行、在html文檔中的位置昼丑,分為多種情況矾克。而且執(zhí)行運行情況又不一樣。所以有必要了解酒繁。

不同類js代碼解析運行區(qū)別:

1504256859(1).jpg

栗子

  • index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    //1.外部引入js文件outer1.js
    <script src="js/outer1.js"></script>

    //2.內(nèi)部head標簽內(nèi)代碼段
    <script type="text/javascript">
        console.log("(head無綁定加載事件) " + document.getElementById("image") + ", run at:" + (new Date().getTime() - startTime));
    </script>
</head>
<body>

    <img src="http://pic1.win4000.com/wallpaper/4/5546eae50c041.jpg"
         id="image" alt="落日原圖">

    //3.外部引入js文件outer2.js
    <script src="js/outer2.js"></script>

    //4.綁定window.onload的內(nèi)部代碼
    <script type=text/javascript>
      window.onload = function () {
            console.log("window.load! run at:" + (new Date().getTime() - startTime));
        }
    </script>

    //5.內(nèi)部body標簽內(nèi)代碼段
    <script type="text/javascript">
        document.addEventListener("DOMContentLoaded", function(event) {
            console.log("DOMContentLoaded:DOM fully loaded and parsed州袒, run at :" + (new Date().getTime() - startTime));
        });

        console.log("inner js(body無綁定加載事件), run at:" + (new Date().getTime() - startTime));
        console.log("(inner body無綁定加載事件)" + document.getElementById("image") + " run at:" + (new Date().getTime() - startTime));
        document.getElementById("image").onload = function () {
            console.log("img loaded (body綁定圖片加載事件), loaded at:" + (new Date().getTime() - startTime));
        }
    </script>

</body>
</html>
  • outer1.js
//outer1.js 
//引入位置:head中
var startTime = new Date().getTime();  //為后面記錄代碼開始執(zhí)行時間提供標準
console.log("outer1 js (head)! run at(ms):" + (new Date().getTime() - startTime));
  • outer2.js
//outer2.js 
//引入位置: body后
console.log("outer2 js (body)! run at:" + (new Date().getTime() - startTime));
  • 運行結(jié)果
result.png
  • 分析:

首先郎哭,每個語句后面時間以ms為單位菇存。此時間是依鸥,以outer1.js中var startTime = new Date().getTime();語句執(zhí)行時作為0時刻(起始時間)來區(qū)別其他js輸出語句執(zhí)行時間。
然后姐扮,特地選較大的圖片,更明顯看出
再次茶敏,通過控制臺查看各文件加載情況:好像除了index.html頁面最先加載之外,其他外部css贮乳、js文件的隨機加載解析胀屿,并沒有一定順序。取決于進入加載隊列的時間亲铡。


1504257209(1).jpg
上述js代碼無綁定加載事件時奖蔓,本人猜測是在步驟4才執(zhí)行讹堤,因為DOM TREE構(gòu)建完成,理由在下面例子中js語句console.log(document.getElementById("image"))console.log("DOMContentLoaded:DOM fully loaded and parsed....)兩者打印時間判斷疑务,但是又覺得不大合理梗醇。求大神告知,為何DOMContentLoaded反而后執(zhí)行温鸽?

小結(jié):

題目有誤手负,除非特地指明“頁面加載的時候”指的僅僅是加載body部分(但我覺得這個理解不OK)。不然的話蝠猬,head里面的js代碼段只要沒綁定了load统捶、ready等事件敦姻,在DOM文檔加載過程中都會加載歧杏、解析犬绒、執(zhí)行兑凿。如上例,不管是head(代碼段1,2)礼华,還是body(代碼段3,5)圣絮;不管是外部還是內(nèi)部,一樣會執(zhí)行捧请。

分享三篇相關(guān)文章:
jQuery $(document).ready()和JavaScript onload事件
DOMContentLoaded
jQuery DOM Ready

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疹蛉,一起剝皮案震驚了整個濱河市力麸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌克蚂,老刑警劉巖陨舱,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異误墓,居然都是意外死亡益缎,警方通過查閱死者的電腦和手機莺奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恼琼,“玉大人,你說我怎么就攤上這事蛙卤∝溃” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵行嗤,是天一觀的道長栅屏。 經(jīng)常有香客問我堂鲜,道長,這世上最難降的妖魔是什么甫恩? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任酌予,我火速辦了婚禮,結(jié)果婚禮上松靡,老公的妹妹穿的比我還像新娘建椰。我一直安慰自己,他們只是感情好屠列,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布笛洛。 她就那樣靜靜地躺著乃坤,像睡著了一般沟蔑。 火紅的嫁衣襯著肌膚如雪狱杰。 梳的紋絲不亂的頭發(fā)上仿畸,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音,去河邊找鬼例隆。 笑死甥捺,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的镀层。 我是一名探鬼主播镰禾,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唱逢!你這毒婦竟也來了吴侦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤坞古,失蹤者是張志新(化名)和其女友劉穎备韧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痪枫,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡织堂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年奶陈,在試婚紗的時候發(fā)現(xiàn)自己被綠了易阳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡吃粒,死狀恐怖潦俺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徐勃,我是刑警寧澤事示,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站僻肖,受9級特大地震影響很魂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檐涝,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一遏匆、第九天 我趴在偏房一處隱蔽的房頂上張望法挨。 院中可真熱鬧,春花似錦幅聘、人聲如沸凡纳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荐糜。三九已至,卻和暖如春葛超,著一層夾襖步出監(jiān)牢的瞬間暴氏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工绣张, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留答渔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓侥涵,卻偏偏與公主長得像沼撕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芜飘,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1.幾種基本數(shù)據(jù)類型?復雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined务豺、Nul...
    極樂君閱讀 5,502評論 0 106
  • 五十三:請解釋 JavaScript 中 this 是如何工作的。1.方法調(diào)用模式當一個函數(shù)被保存為一個對象的屬性...
    Arno_z閱讀 572評論 0 2
  • God's great power is in the gentle breeze, not in the sto...
    我是嗚嗚閱讀 322評論 0 2
  • 第一次畫水彩嗦明,求大神指點╭(╯ε╰)╮
    塵話桑麻閱讀 239評論 2 4
  • 本周出差回來笼沥,周三晚上到公司,然后周四周五無心上班娶牌,中午等到了現(xiàn)在敬拓,和幾個朋友出來吃飯。 吃著飯裙戏,然后聽著歌乘凸,找出...
    桐樹花開閱讀 192評論 0 0