關於在html中引入jquery-1.4.3.js文件,產生的$ is not defined


今天在寫項目的的時候遇到一個問題,將jquery文件的引入放在js代碼之前項目不報錯,但是放在js代碼之后,在瀏覽器運行html會報出$ is not defined,但是在其他的html頁面中,放在js代碼之后卻不會產生這樣的問題,思來想去,考慮這可能與html頁面的加載順序有關,html頁面的加載順序是:

從上到下運行,先解析head標簽中的代碼,
  1>head標簽中會包含一些引用外部文件的代碼,從開始運行就會下載這些被引用的外部文件
           當遇到script標簽的時候,瀏覽器暫停解析(不是暫停下載),將控制權交給JavaScript引擎(解釋器)
           如果<script>標簽引用了外部腳本,就下載該腳本,否則就直接執行,執行完畢后將控制權交給瀏覽器渲染引擎
  2>當head中代碼解析完畢,會開始解析body中的代碼,如果此時head中引用的外部文件沒有下載完,將會繼續下載
           瀏覽器解析body代碼中的元素,會按照head中聲明一部分樣式去解析,如果此時遇到body標簽中的<script>,

                同樣會將控制權交給JavaScript引擎來解析JavaScript 解析完畢后將控制權交還給瀏覽器渲染引擎。
           當body中的代碼全部執行完畢、並且整個頁面的css樣式加載完畢后,css會重新渲染整個頁面的html元素。
  3>按照之前的描述,<script>寫到body標簽內靠后比較好,
           因為JavaScript 會操作html元素, 如果在body加載完之前寫JavaScript 會造成JavaScript 找不到頁面元素
           但是我們經常將<script>寫到head中,body中不會有大量的js代碼,body中的html代碼結構會比較清晰
           window.onload: 等待頁面中的所有內容加載完畢之后才會執行
           $(document).ready(): 頁面中所有DOM結構繪制完畢之后就能夠執行
           可以這樣理解:window.onload 和 $(document).ready()/$(function(){}); 相當於  寫在body 內  最靠后的<script> 代碼段

  所以瀏覽器應該是解析完body之后,先去引入js,在解析js代碼,以后要是遇到$ is not defined這樣的錯誤,可以將引入js放到js代碼的前面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM