閉包和作用域
原型和原型鏈
所有原型鏈的終點(diǎn)都是 Object 函數(shù)的 prototype 屬性
每一個構(gòu)造函數(shù)都擁有一個 prototype 屬性低矮,此屬性指向一個對象典格,也就是原型對象
原型對象默認(rèn)擁有一個 constructor 屬性焕议,指向指向它的那個構(gòu)造函數(shù)
每個對象都擁有一個隱藏的屬性 __ proto __糙捺,指向它的原型對象
事件循環(huán)機(jī)制
js垃圾回收
不同垃圾是按存活時間分為新生代和老生代。不同的代回收機(jī)制也不同
新生代由from和to區(qū)域組成(默認(rèn)64位 from和to各占16M)滥酥,老生代則只有一塊區(qū)域
新生代中的垃圾回收機(jī)制----引用計數(shù)
新生代的空間小石景,存活對象少
1劈猿、開始垃圾回收的時候,會檢查FROM區(qū)域中的存活對象潮孽,如果還活著(引用計數(shù))揪荣,拷貝到TO空間,完成后釋
放空間
2恩商、完成后FROM 和TO 互換
當(dāng)一個對象經(jīng)歷過多次的垃圾回收依然存活的時候变逃,生存周期比較長的對象會被移動到老生代,這個移動過程被成為晉升或者升級
1.經(jīng)過5次以上的回收還存在
2.TO的空間使用占比超過25%怠堪,或者超大對象
新生代中的垃圾回收機(jī)制----標(biāo)記清除揽乱、標(biāo)記整理
老生代空間大,大部分都是活著的對象,GC耗時比較長
mark-sweep(標(biāo)記清除) mark-compact(標(biāo)記整理)
mark-sweep(標(biāo)記清除)
標(biāo)記活著的對象粟矿,隨后清除在標(biāo)記階段沒有標(biāo)記的對象凰棉,只清理死亡對象
問題在于清除后會出現(xiàn)內(nèi)存不連續(xù)的情況,這種內(nèi)存碎片會對后續(xù)的內(nèi)存分配產(chǎn)生影響
如果要分配一個大對象陌粹,碎片空間無法分配
mark-compact(標(biāo)記整理)
標(biāo)記死亡后會對對象進(jìn)行整理撒犀,活著的對象向左移動,移動完成后直接清理掉邊界外的內(nèi)存
節(jié)流與防抖
async和defer
async : 加載腳本和渲染后續(xù)文檔元素并行進(jìn)行掏秩,腳本加載完成后或舞,暫停html解析,立即解析js腳本
defer : 加載腳本和渲染后續(xù)文檔元素并行進(jìn)行蒙幻,但腳本的執(zhí)行會等到 html 解析完成后執(zhí)行
如果你的腳本代碼依賴于頁面中的DOM元素(文檔是否解析完畢)映凳,或者被其他腳本文件依賴∮势疲可以用defer诈豌。如果不依賴就可以用async
target和currentTarget的區(qū)別
target:指的是事件流的目標(biāo)階段仆救,獲取的是被點(diǎn)擊的元素。
currentTarget:在事件流的捕獲和冒泡階段時矫渔,是指向當(dāng)前事件活動對象彤蔽,只有在目標(biāo)階段的時候,兩者才會相等
getxxxByxxx 和 queryxxx區(qū)別
1庙洼、getxxxByxxx獲取的是動態(tài)的元素顿痪,query獲取的是靜態(tài)的
2、get是dom規(guī)范送膳,query是selector規(guī)范