從面試中查漏補缺
阿新 • • 發佈:2021-07-29
工作以來換了幾個地方,這次打算認真找一個合適的公司。總結一下部分最近遇到的面試題
1.巨集佇列和微佇列
巨集佇列:dom事件回撥、ajax回撥、定時器回撥
微佇列:promise回撥、mutation回撥
執行時下一個巨集佇列時會先執行微佇列。
const first = () => (new Promise((resolve, reject)=>{ console.log(3); let p = new Promise((resolve, reject)=>{ console.log(7); setTimeout(() => { console.log(5) resolve(6) }, 0); resolve(1); }) resolve(2); p.then(value=>{ console.log(value) }) })) first().then(value=>{ console.log(value) }) console.log(4); 輸出結果為:3 7 4 1 2 5
2.閉包
用途:函式傳參
函式防抖,
封裝私有變數,
作為回撥
定義行為,然後把它關聯到某個使用者事件上(點選或者按鍵)。程式碼通常會作為一個回撥(事件觸發時呼叫的函式)繫結到事件。
<body> < a href=" " id="size-12">12</ a> < a href="#" id="size-20">20</ a> < a href="#" id="size-30">30</ a> <script type="text/javascript"> function changeSize(size){ return function(){ document.body.style.fontSize= size + 'px'; }; } var size12 = changeSize(12); var size14 = changeSize(20); var size16 = changeSize(30); document.getElementById('size-12').onclick = size12; document.getElementById('size-20').onclick = size14; document.getElementById('size-30').onclick = size16; </script> </body> </html>
優點:
1.保護函式內的變數安全,加強了封裝性
2.在記憶體中維持一個變數(用的太多就變成了缺點,佔記憶體)
閉包之所以會佔用資源是當函式a執行結束後, 變數i不會因為函式a的結束而銷燬, 因為b的執行需要依賴a中的變數。
缺點:會佔用大量記憶體,
3.深拷貝和淺拷貝
淺拷貝只是增加了一個指標指向已經存在的記憶體,而深拷貝就是增加一個指標並且申請一個新的記憶體。
4.promise
5.指向與強制更改指向(call,apply,bind)
6...