閉包和作用域
原型和原型鏈
所有原型鏈的終點都是 Object 函數(shù)的 prototype 屬性
每一個構造函數(shù)都擁有一個 prototype 屬性,此屬性指向一個對象,也就是原型對象
原型對象默認擁有一個 constructor 屬性,指向指向它的那個構造函數(shù)
每個對象都擁有一個隱藏的屬性 __ proto __,指向它的原型對象
事件循環(huán)機制
js垃圾回收
不同垃圾是按存活時間分為新生代和老生代。不同的代回收機制也不同
新生代由from和to區(qū)域組成(默認64位 from和to各占16M),老生代則只有一塊區(qū)域

新生代中的垃圾回收機制----引用計數(shù)
新生代的空間小,存活對象少
1、開始垃圾回收的時候,會檢查FROM區(qū)域中的存活對象,如果還活著(引用計數(shù)),拷貝到TO空間,完成后釋
放空間
2、完成后FROM 和TO 互換
當一個對象經(jīng)歷過多次的垃圾回收依然存活的時候,生存周期比較長的對象會被移動到老生代,這個移動過程被成為晉升或者升級
1.經(jīng)過5次以上的回收還存在
2.TO的空間使用占比超過25%,或者超大對象
新生代中的垃圾回收機制----標記清除、標記整理
老生代空間大,大部分都是活著的對象,GC耗時比較長
mark-sweep(標記清除) mark-compact(標記整理)

mark-sweep(標記清除)
標記活著的對象,隨后清除在標記階段沒有標記的對象,只清理死亡對象
問題在于清除后會出現(xiàn)內存不連續(xù)的情況,這種內存碎片會對后續(xù)的內存分配產生影響
如果要分配一個大對象,碎片空間無法分配
mark-compact(標記整理)
標記死亡后會對對象進行整理,活著的對象向左移動,移動完成后直接清理掉邊界外的內存

節(jié)流與防抖
async和defer
async : 加載腳本和渲染后續(xù)文檔元素并行進行,腳本加載完成后,暫停html解析,立即解析js腳本
defer : 加載腳本和渲染后續(xù)文檔元素并行進行,但腳本的執(zhí)行會等到 html 解析完成后執(zhí)行

如果你的腳本代碼依賴于頁面中的DOM元素(文檔是否解析完畢),或者被其他腳本文件依賴??梢杂胐efer。如果不依賴就可以用async
target和currentTarget的區(qū)別
target:指的是事件流的目標階段,獲取的是被點擊的元素。
currentTarget:在事件流的捕獲和冒泡階段時,是指向當前事件活動對象,只有在目標階段的時候,兩者才會相等
getxxxByxxx 和 queryxxx區(qū)別
1、getxxxByxxx獲取的是動態(tài)的元素,query獲取的是靜態(tài)的
2、get是dom規(guī)范,query是selector規(guī)范