一、請說下你對promise的理解
答:
一、promise是異步操做的同步代碼
二、promise的基本使用
經過new promise建立的一個promise對象,裏面有一個參數,參數是一個回調函數,回調函數中有兩個參數,resolve,rejectresolve()當異步執行成功的時候調用的方法,reject()當異步失敗的時候調用的方法。
二、什麼是閉包?閉包的危害?閉包使用的場景?什麼是js的垃圾回收機制?
答:
一、什麼是閉包:
打破了做用域鏈的規則
二、閉包的危害:
因爲閉包會使得函數中的變量都被保存在內存當中,內存會消耗很大,因此不可以濫用閉包,不然 會形成網頁性能的問題
三、閉包使用的場景:
(1)採用函數引用方式的setTimeout調用
閉包的一個一般用法是爲一個在某一函數執行前先執行的函數提供參數。
(2)將函數關聯到對象的實例方法
有不少這樣的場景:須要分配一個函數對象的引用,以便在將來的某個時間執行該函數。那麼閉包對於爲這個將要執行的函數提供引用會很是有幫助,由於該函數可能直到執行時纔可可以被訪問。
(3)封裝相關的功能集
閉包能夠建立額外的scope,這能夠被用來組合相關或有依賴性的代碼。用這種方式能夠最大限度地減小代碼干擾的危害。
四、垃圾回收機制:
js具備自動垃圾回收機制,垃圾收集器會按照固定的時間間隔週期性的執行。
js中最多見的垃圾回收方式是標記清楚。
工做原理:
是當變量進入環境時,將這個變量標記爲「進入環境」。當變量離開環境時,則即將其標記爲「離開環境」。標記「離開環境」的就是回收內存、
三、如何將僞數組轉換爲數組,至少兩種方式
答:(1)聲明一個空數組,經過遍歷僞數組把它們從新添加到新數組中。
var aLi = document.querySelectorAll('li');
var arr = [];
for( var i = 0; i<aLi.length;i++){
arr[arr.length]=aLi[i]
}
(2)使用數組的slice()方法,它返回的是數組,使用call或者apply指向僞數組
var arr = Array.prototype.slice.call(aLi)
(3)使用原型繼承
aLi.___proto__ = Array.prototype;
(4)ES6中數組的新方法from()
function test(){
var arg = Array.from(argumengts);
arg.push(5);
console.log(arg);
}
teat(1,2,3,4)
(5)jq的makeArray()和toArray()方法,它返回的是數組,使用call或者apply指向僞數組
makeArray():使用了數組的push方法;
toArray():使用了數組的slice方法
四、什麼是迴流和重繪?何時會發生迴流?
答:迴流與重繪:
當渲染樹中的一部分或者所有由於元素的尺寸、佈局、隱藏等改變而須要從新構建的時候,這時候就會發生迴流。
每一個頁面都至少發生一次迴流,也就是頁面第一次加載的時候。
在迴流的時候,瀏覽器會使渲染樹中受到影響的元素部分失效,並從新繪製這個部分的渲染樹,完成迴流之後,瀏覽器會從新繪製受到影響的部分元素到屏幕中,這個過程就是重繪。
何時會發生迴流?
一、添加或者刪除可見的DOM元素的時候
二、元素的位置發生改變
三、元素尺寸改變
四、內容改變
五、頁面第一次渲染的時候
注:迴流一定觸發重繪,重繪不必定觸發迴流
五、什麼是模塊化開發?模塊化開發的優勢
答:
什麼是模塊化開發:
指文件的組織、管理、使用的方式。即把一個大的文件拆分紅幾個小的文件,他們之間相互引用、依賴。
模塊化開發的優勢:
一、模塊化開發加載速度快;
二、能夠作到代碼重用,減小代碼贅餘
三、模塊化開發能夠整合思考,減小代碼耦合。
六、瀏覽渲染頁面的流程
答:
一、解析HTML,構建DOM
二、解析CSS,構建CSSOM
三、JS腳本加載
四、建立Render Tree樹(呈現樹)
五、佈局(Layout)
六、繪製(Painting)
七、迴流(Reflow)和重繪(Repaint)
七、ES5新增的數組方法有哪些?
答:
indexOf():返回第一次出現的下標
lastIndexOf():返回最後一次出現的下標
forEach():循環
map():映射
filter():過濾
reduce():累加器
數組