《JavaScript進階程式設計》的學習總結 二

來源:互聯網
上載者:User

標籤:html   指令碼語言   vbscript   ade   rom   nbsp   進階   控制   空白   

引言:在學習JavaScript之前,我們要先學習如何在HTML中引用JavaScript,此篇總結將會詳細介紹<script>元素的用法及其屬性,並分析幾種引用方式的優劣,以及延遲指令碼和非同步指令碼的區別。

 

<script>的介紹及其屬性

  向HTML中插入JavaScript的只要方法使用<script>元素,這個元素由Netscape (網景公司)創造,並在Netscape Navigator 2中首先實現,後來這個元素被加入到正式的HTML規範中。HTML4.01

為<script>定義了六個屬性:

  1、async  [?‘z??k](非同步) :可選,表示應該立即下載指令碼,當時不妨礙頁面中的其他動作,比如下載其他資源或者等待其他指令碼,只對外部指令檔有效

  2、charset (字元集): 可選,表示通過src 屬性指定的代碼的字元集,由於太多瀏覽器會忽略它的值,所以平時很少有用到。

  3、defer(延遲) :可選。表示指令碼可以延遲到文檔完全被解析和顯示之後再執行。只對外部檔案有效,IE7以及更早的版本對嵌入指令碼也支援這個屬性。

  4、langage :已廢棄的屬性,原先用於表示編寫代碼使用的指令碼語言,比如:JavaScript、JavaScript1.2 或者VBScript ,大多數瀏覽器忽略這個屬性。就不用了。

  5、src :可選,表示包含要執行的檔案。

  6、type :可選,可以看成是 langage 的替代,表示編寫代碼使用的指令碼語言的內容的類型(也稱為MIME類型),這個屬性不是必要的,如果沒有指定這個屬性,那麼其預設為:text/javascript.。

 

<script>的使用:

 最簡單的方式直接內嵌程式碼:在使用<script>嵌入JavaScript時 ,只需要指定type 即可 :<script type="text/javascript"> ...程式碼片段...</script> , 這裡注意的是代碼是從上到下執行,在碰到"</script>"

的時候就停止,所以代碼中謹慎不要隨意出現這個程式碼片段,比如 “alert (“</script>”)”這樣會造成代碼停止,但是如果非得使用的話,可以這樣:“alert (“< \/script>”)”。

 

 外部參考方式:使用 src 屬性標出URL,從外部參考:<script  type="text/javascript" src="指令檔的URL"></script> 這種方式平時我們用的比較多,平時我們不指定 defer 與async 屬性的話,

那麼指令檔會按照它在頁面中的出現順序來執行。

  

  內嵌程式碼與外部檔案的兩種方式的優劣:雖然兩種方式都可以讓頁面使用到JavaScript ,但是一般認為最好的方式是採用外部檔案引用的方式(雖然這不是硬性要求),但是相對於直接在頁面中

內嵌程式碼讓頁面看起來更 “臃腫”,不得不說外部參考其優點也是和明顯的,而且不僅如此,外部參考的好處還有:

  1、可維護性:遍及不同HTML 頁面的JavaScript 會造成維護問題(如果採用嵌入式,碰到每個頁面都用一個JavaScript代碼,那麼如果這個JavaScript代碼需要修改就得每個頁面都改一次,會增加維護難度)。

而如果採用外部參考,直接修改一次玩不檔案就行了。

 

  2、可緩衝:瀏覽器能夠根據具體的設定緩衝連結的所有外部JavaScript檔案,也就是說如果兩個頁面都採用一個檔案,那麼這個檔案只需要下載一次就可以了。

 

  3、適應未來:HTML與XHTML包含外部檔案的文法是相同的。(XHTML真的是很嚴格)

 

頁面中<script>的位置:

  按照慣例我們可能會把 <script>放到<head>標籤裡面,這種方式就是希望把外部參考的檔案放到一起,讓頁面看起來更規範,但是不好的地方是頁面載入到<head>時會停止然後等待

JavaScript載入結束才繼續執行,這樣一來頁面的載入速度效能會大打折扣(因為網頁載入到body 時才開始呈現頁面內容,所以如果在head載入JavaScript造成頁面延遲的話,那麼在延遲期間

頁面將是以一片空白)。為了避免這樣的情況,一般我們會將JavaScript檔案的引用放到body 元素中頁面的內容後面:

<body>

頁面內容》》》》》》》》》》》》》》》》》》

頁面內容》》》》》》》》》》》》》》》》》》

頁面內容》》》》》》》》》》》》》》》》》》

 

<script src="demo.js"  type="text/javascript"></script>

</body>

 

延遲指令碼 defer:

   這個屬性的用途是表明指令碼在執行時不會影響頁面構造,也就是說,指令碼會延遲到整個頁面都解析完後在再運行,因此使用這個元素就是告訴

瀏覽器“ 立即下載,但是請順延強制”,(一般來說就是延遲到瀏覽器碰到 </html>標籤後再執行,就算我們將<script>放到<head>中也是如此)。

  HTML5規範要求指令碼按照它們出現的先後順序執行,因此第一個延遲指令碼會先於第二個延遲指令碼執行,而這兩個指令碼會先於DOMContentLoaded事件。在現實當中,延遲指令碼並不一定會按照順序執行,

也不一定會在DOMContentLoaded事件觸發前執行,因此最好只包含一個延遲指令碼。
  

  IE4~IE7還支援對嵌入指令碼的defer屬性,但IE8以及之後的版本則完全支援HTML5規定的行為。
 
  IE4,Firefox 3.5,Safari 5和Chrome是最早支援defer屬性的瀏覽器。其他瀏覽器胡忽略這個屬性,像平常一樣處理指令碼,為此,把延遲指令碼放在頁面底部仍然是最佳選擇。

  defer屬性的指令碼是在頁面解析完成後,按照順序執行,同時會在document的DOMContentLoaded之前執行。

 

非同步指令碼 async:

  這個屬性的作用不讓頁面等待指令碼下載和執行,從非同步載入頁面和其他內容。為此,建議非同步指令碼不要在載入期間修改DOM .

  async屬性的指令碼會在下載結束後立刻執行,同時會在window的load事件之前執行,所以就會出現順序被打亂的情況;

 

沒有defer 與async:

  瀏覽器會立即載入並執行指定的指令碼,“立即”指的是在渲染該 script 標籤之下的文件項目之前,也就是說不等待後續載入的文件項目,讀到就載入並執行。

 

<noscript>:

早期的瀏覽器面臨一個問題,即當瀏覽器不支援javascript 的時候,如何考慮 “平穩退化” ,此時就有了<noscript>的作用了。這個標籤的作用是:當瀏覽器不支援javascript,或者是支援但是被

停止使用JavaScript 的時候用來替代內容所用。

例如:

<body>

<noscript>  <p>本頁面需要啟用javascript功能</p> </noscript>

</body>

 

 

---------------------------------------------------------------------------

本章完,下一章"預告“:JavaScript的文法,資料類型,控制語句。

 

《JavaScript進階程式設計》的學習總結 二

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.