HTML與XHTML------- 二者有什么區(qū)別
- 所有標記都必須要有一個相應的結(jié)束標記
- 所有標簽的元素和屬性的名字都必須使用小寫
- 所有的XML標記必須合理嵌套
- 所有的屬性必須使用引號
""
括起來 - 把所有的
<
和&
特殊符號用編碼表示 - 給所有屬性附一個值
- 不要再注釋內(nèi)容中使用
-
- 圖片必須有說明文字
html5有哪些新特性
- 語義化更好的內(nèi)容標簽
header
,nav
,footer
,aside
赂苗,section
- 音頻掉丽、視頻API
audio
悯搔,video
- 畫布API
canvas
- 地理API
geolocation
- 拖拽縮放API
Drag and drop
- 本地離線存儲
localStorage
- 表單控件
calendar
佃蚜,date
夭咬,time
趋箩,email
赃额,url
,search
一個頁面從輸入URL到頁面加載顯示完成叫确,這個過程中都發(fā)生了什么
- 瀏覽器根據(jù)請求的URL交給DNS域名解析跳芳,找到真實IP,向服務器發(fā)起請求(TCP三次握手)竹勉;
- 服務器交給后臺處理完成后返回數(shù)據(jù)飞盆,瀏覽器接收文件(HTML、js次乓、css吓歇、圖像等);
- 瀏覽器對加載到的資源(HTML票腰、js城看、css等)進行語法解析,建立相應的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如HTML的?DOM)杏慰;
- 載入解析到的資源文件测柠,渲染頁面,完成缘滥。
瀏覽器的渲染過程
- 瀏覽器請求到HTML代碼后轰胁,在生成DOM的最開始階段,并行發(fā)起CSS朝扼、圖片软吐、js的請求,無論他們是否在header里吟税。瀏覽器會將HTML解析成一個DOM樹凹耙,DOM樹的構(gòu)建過程是一個深度遍歷過程:當前節(jié)點的所有子節(jié)點都構(gòu)建好后才回去構(gòu)建當前節(jié)點的下一個兄弟節(jié)點;
- css文件下載完成肠仪,開始構(gòu)建CSSOM肖抱;
- 所有css?文件下載完成,CSSOM構(gòu)建結(jié)束后异旧,和DOM一起生成Render Tree意述;
- 有了render tree,瀏覽器已經(jīng)能知道網(wǎng)頁中有哪些節(jié)點吮蛹,各個節(jié)點的css定義以及他們的從屬關系荤崇,下一步操作就是計算出每個節(jié)點在屏幕中的位置。
- 最后一步潮针,按照算出來的規(guī)則术荤,把內(nèi)容渲染到屏幕上。
以上五個步驟的前三步因為DOM每篷、CSSOM瓣戚、render tree都可能在第一次Painting后又被更新多次,比如js修改了DOM或者CSS屬性焦读,Layout和Painting也會被重復執(zhí)行子库,除了DOM、CSSOM更新的原因外矗晃,圖片下載完成后也需要調(diào)用Layout和Painting來更新網(wǎng)頁仑嗅。
display:none;
的節(jié)點不會被加入Render Tree,而visibility:hidden;
則會。如果某個節(jié)點最開始是不顯示的张症,設為?display:none;
是最優(yōu)的仓技。
閉包
第一種理解(紅寶書):閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù),創(chuàng)造閉包最常見的方式就是在一個函數(shù)內(nèi)創(chuàng)建另一個函數(shù)吠冤,通過另一個函數(shù)訪問這個函數(shù)的局部變量浑彰。
第二種理解(你不知道的JavaScript):當函數(shù)可以記住并訪問所在的詞法作用域時,就產(chǎn)生了閉包拯辙,這個函數(shù)持有對該詞法作用域的引用郭变,這個引用就叫做閉包。
閉包本質(zhì)還是函數(shù)涯保,只不過這個函數(shù)綁定了上下文環(huán)境(函數(shù)內(nèi)部引用的所有變量)
缺點: 常駐內(nèi)存诉濒,會增大內(nèi)存使用量,使用不當很容易造成內(nèi)存泄漏夕春。
作用(使用場景):可以用來管理私有變量和私有方法未荒,將對變量(狀態(tài))的變化封裝在安全的環(huán)境中,使得這些變量不能被外部隨意修改及志,同時又可以通過指定的函數(shù)借口來操作片排。
閉包有三個特性:
- 函數(shù)嵌套函數(shù)
- 函數(shù)內(nèi)部可以應用外部的參數(shù)和變量
- 參數(shù)和變量不會被垃圾回收機制回收
?##### new操作符具體干了什么呢
- 創(chuàng)建一個新對象
- 將構(gòu)造函數(shù)的作用域賦給新對象(因此this就指向了這個新對象)
- 執(zhí)行構(gòu)造函數(shù)中的代碼(為這個新對象添加屬性)
- 返回新對象
call寨腔、apply、bind的區(qū)別
- 三者都是用來改變函數(shù)的this對象的指向的
- 三者第一個參數(shù)都是this要指向的對象率寡,也就是想指定的上下文
- call傳入的參數(shù)數(shù)量不固定迫卢,第二部分參數(shù)要一個一個傳,用
,
隔開 - apply接受兩個參數(shù)冶共,第二個參數(shù)為一個帶下標的集合乾蛤,可以為數(shù)組,也可以為類數(shù)組捅僵。
- bind是返回一個改變了上下文的函數(shù)副本家卖,便于稍后調(diào)用,apply庙楚、call則是立即調(diào)用上荡。
線程和進程的區(qū)別
- 一個程序至少有一個進程,一個進程至少有一個線程
- 線程的劃分尺度小于進程醋奠,使得多線程程度的并發(fā)性高
- 進程在執(zhí)行過程中擁有獨立的內(nèi)存單元榛臼,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率
- 線程在執(zhí)行過程中與進程還是有區(qū)別的窜司。每個獨立的線程有一個程序運行的入口沛善、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行塞祈,必須依存在應用程序中金刁,由應用程序提供多個線程執(zhí)行控制。
- 從邏輯角度來看议薪,多線程的意義在于一個應用程序中尤蛮,有多個執(zhí)行部分可以同時執(zhí)行,但操作系統(tǒng)并沒有將多個線程看成多個獨立應用斯议,來實現(xiàn)進程的調(diào)度和管理以及資源分配产捞。這就是進程和線程的重要區(qū)別。?