在<head>
內引入外部Js ,報錯出異常,顯示Uncaught TypeError: Cannot read property 'appendChild' of undefined,屬性未定義。為什么出現這種問題。查找很久發現這跟Js、DOM加載順序有關,由於寫在了<head>
內,它會先執行,但是此時由於DOM還未加載完,而Js里有需要獲取DOM中元素的語句要執行,這時就會出現異常,Js報錯Uncaught TypeError: Cannot read property 'appendChild' of undefined,無法讀取未定義的屬性'appendChild'。
解決方法很簡單,將Js的外部文件引入放在<body>
中就行,讓整個頁面加載完后再執行Js就不會出現無法讀取的問題了。(如果是內部Js的話,還可以使用window.onload = function(){} 代碼包裹,也是在文檔加載之后再執行)
---------------------------------------------------------------這是分割線------------------------------------------------------------
這里再(復習)補充一下Js知識:
<head>
內的Js可能會阻塞頁面的傳輸和頁面的渲染,也就是在<head>
內的Js一般要先執行完后,才開始渲染body頁面。所以盡量不要將 JS 文件放在 head 內。可以選擇在 DOM完成時,或者特定區塊后引入和執行 JavaScript。
所以為了避免<head>
內引入的Js會阻塞頁面的傳輸和頁面的渲染,一般原則是,樣式在前面,DOM文檔,腳本在最后面。遵循先解析再渲染再執行Javascript這個順序。