1.CSS和JS在網(wǎng)頁(yè)中的放置順序是怎樣的?
- 一般情況下CSS被放置在head里面速址,因?yàn)殇秩卷?yè)面的話,CSS和html頁(yè)面的內(nèi)容是同時(shí)加載的.
- JS被放置在body內(nèi)容之后加載东臀,因?yàn)镴S的加載會(huì)阻止加載其他的內(nèi)容.
2.解釋白屏和FOUC.
- 不同的瀏覽器對(duì)于CSS和HTML的處理方式不一樣坯苹,有的是等待CSS加載完成之后,對(duì)HTML元素進(jìn)行渲染和展示叶沛。此時(shí)容易出現(xiàn)白屏問(wèn)題
- 有的是先對(duì)HTML元素進(jìn)行展示蒲讯,然后等待CSS加載完成后重新對(duì)樣式進(jìn)行修改。此時(shí)容易出現(xiàn)FOUC無(wú)樣式內(nèi)容閃爍
- 如果把CSS樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(新窗口打開,刷新等)頁(yè)面會(huì)出現(xiàn)白屏,而不是內(nèi)容逐步展現(xiàn)灰署,如果使用 @import標(biāo)簽,即使 CSS 放入 link, 并且放在頭部,也可能出現(xiàn)白屏判帮。
- 如果把CSS樣式放在底部,對(duì)于IE瀏覽器,在某些場(chǎng)景下(點(diǎn)擊鏈接,輸入U(xiǎn)RL,使用書簽進(jìn)入等),會(huì)出現(xiàn)FOUC現(xiàn)象(逐步加載無(wú)樣式的內(nèi)容,等CSS加載后頁(yè)面突然展現(xiàn)樣式).對(duì)于Firefox會(huì)一直表現(xiàn)FOUC 局嘁。
- 如果把js文件放在頭部,腳本會(huì)阻塞后面內(nèi)容的呈現(xiàn)晦墙,腳本會(huì)阻塞其后組件的下載悦昵,出現(xiàn)白屏問(wèn)題。
3.async和defer的作用是什么晌畅?有什么區(qū)別但指。
- 默認(rèn)引用 script:<script type="text/javascript" src="x.min.js"></script>
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí),文檔的解析將停止踩麦,并立即下載并執(zhí)行腳本枚赡,腳本執(zhí)行完畢后將繼續(xù)解析文檔。 - async模式 <script type="text/javascript" src="x.min.js" async="async"></script>
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí)谓谦,文檔的解析不會(huì)停止贫橙,其他線程將下載腳本,腳本下載完成后開始執(zhí)行腳本反粥,腳本執(zhí)行的過(guò)程中文檔將停止解析卢肃,直到腳本執(zhí)行完畢。
3.defer模式 <script type="text/javascript" src="x.min.js" defer="defer"></script>
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí)才顿,文檔的解析不會(huì)停止莫湘,其他線程將下載腳本,待到文檔解析完成郑气,腳本才會(huì)執(zhí)行幅垮。
區(qū)別:所以async和defer的最主要的區(qū)別就是async是異步下載并立即執(zhí)行,然后文檔繼續(xù)解析尾组,defer是異步加載后解析文檔忙芒,然后再執(zhí)行腳本.
5.簡(jiǎn)述網(wǎng)頁(yè)的渲染機(jī)制。
1)瀏覽器會(huì)解析三個(gè)東西:
一個(gè)是HTML/SVG/XHTML讳侨,事實(shí)上呵萨,Webkit有三個(gè)C++的類對(duì)應(yīng)這三類文檔。解析這三種文件會(huì)產(chǎn)生一個(gè)DOM Tree跨跨。
CSS潮峦,解析CSS會(huì)產(chǎn)生CSS規(guī)則樹。
Javascript勇婴,腳本忱嘹,主要是通過(guò)DOM API和CSSOM API來(lái)操作DOM Tree和CSS Rule Tree.
2)解析完成后,瀏覽器引擎會(huì)通過(guò)DOM Tree 和 CSS Rule Tree 來(lái)構(gòu)造 Rendering Tree耕渴。注意:
Rendering Tree 渲染樹并不等同于DOM樹德谅,因?yàn)橐恍┫馠eader或display:none的東西就沒(méi)必要放在渲染樹中了。
CSS 的 Rule Tree主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個(gè)Element萨螺。也就是DOM結(jié)點(diǎn)窄做。也就是所謂的Frame愧驱。
然后,計(jì)算每個(gè)Frame(也就是每個(gè)Element)的位置椭盏,這又叫l(wèi)ayout和reflow過(guò)程组砚。
1)瀏覽器會(huì)解析三個(gè)東西:
一個(gè)是HTML/SVG/XHTML,事實(shí)上掏颊,Webkit有三個(gè)C++的類對(duì)應(yīng)這三類文檔糟红。解析這三種文件會(huì)產(chǎn)生一個(gè)DOM Tree。
CSS乌叶,解析CSS會(huì)產(chǎn)生CSS規(guī)則樹盆偿。
Javascript,腳本准浴,主要是通過(guò)DOM API和CSSOM API來(lái)操作DOM Tree和CSS Rule Tree.
2)解析完成后事扭,瀏覽器引擎會(huì)通過(guò)DOM Tree 和 CSS Rule Tree 來(lái)構(gòu)造 Rendering Tree。注意:
Rendering Tree 渲染樹并不等同于DOM樹乐横,因?yàn)橐恍┫馠eader或display:none的東西就沒(méi)必要放在渲染樹中了求橄。
CSS 的 Rule Tree主要是為了完成匹配并把CSS Rule附加上Rendering Tree上的每個(gè)Element。也就是DOM結(jié)點(diǎn)葡公。也就是所謂的Frame罐农。
然后,計(jì)算每個(gè)Frame(也就是每個(gè)Element)的位置催什,這又叫l(wèi)ayout和reflow過(guò)程涵亏。
3)最后通過(guò)調(diào)用操作系統(tǒng)Native GUI的API繪制。
5.JavaScript 定義了幾種數(shù)據(jù)類型?哪些是簡(jiǎn)單類型?哪些是復(fù)雜類型?
數(shù)據(jù)類型包含,一共有5種簡(jiǎn)單類型和1種復(fù)雜類型
undefined (簡(jiǎn)單)
null (簡(jiǎn)單)
boolean (簡(jiǎn)單)
number (簡(jiǎn)單)
string (簡(jiǎn)單)
object(復(fù)雜)
6.NaN蒲凶、undefined气筋、null分別代表什么?
NaN:not a number 是一個(gè)特殊的數(shù)值。
undefined:var 聲明變量豹爹,但是沒(méi)有對(duì)其加以賦值的時(shí)候裆悄,變量的值是矛纹。undefined臂聋。
null:表示一個(gè)空對(duì)象指針。
7.typeof和instanceof的作用和區(qū)別?
instanceof和typeof都能用來(lái)判斷一個(gè)變量是否為空或是什么類型的變量
在變量和值上調(diào)用typeof或南,將返回一個(gè)字符串孩等,這個(gè)字符串標(biāo)示了這個(gè)變量或值的類型。如果這個(gè)變量或值是一個(gè)引用類型將會(huì)返回"object"采够。
代碼題
1.完成如下代碼判斷一個(gè)變量是否是數(shù)字肄方、字符串、布爾蹬癌、函數(shù) (難度)
2.以下代碼的輸出結(jié)果是?(難度*)
3.以下代碼的輸出結(jié)果是? (難度***)
4.遍歷數(shù)組权她,把數(shù)組里的打印數(shù)組每一項(xiàng)的平方 (難度**)
5.遍歷 JSON, 打印里面的值
6.下面代碼的輸出是? 為什么