web前端面試5

1 jsonp方案需要服務端怎么配合

后端根據(jù)jsonp參數(shù)名獲取到參數(shù)后要與本來要返回的json數(shù)據(jù)按“callback(json)”的方式構(gòu)造

2 ES6中promise、generator和async/await中的錯誤處理

var promise=new Promise(function(resolve,reject){
   try {
      throw new Error('test');
   }catch(e){
      reject(e)
   }
})

function * F(){
   try{
     yield 1
   }catch(e){
     console.log(e)
   }
}
var f=F();
f.next()//增加了一句next執(zhí)行,可以執(zhí)行g(shù)enerator里面的內(nèi)容
f.throw(new Error('test1'))
//捕獲錯誤 Error test1

async function F(){
  await Promise.reject('Error test1').catch(function(e){
     console.log(e)
  })
}
var f=F(); // Error:test1

(1)Promise、generator錯誤都可以在構(gòu)造體里面被捕獲,而async/await返回的是promise,可以通過catch直接捕獲錯誤。

(2)generator 拋出的錯誤,以及await 后接的Promise.reject都必須被捕獲,否則會中斷執(zhí)行。

3 JS里垃圾回收機制是什么,常用的是哪種,怎么處理的

1.什么是js的垃圾回收機制?
答:javascript中垃圾收集機制是自動回收的,不用人工操作,這讓我們更專注于編輯代碼上。 回收垃圾機制是定時執(zhí)行的,具有周期性。

2.什么時候會有垃圾?

答:在作用域中當整個作用域中的代碼執(zhí)行完后,作用域中的變量和方法都會沒用,此時就是被當做垃圾了。比如局部作用域,一個函數(shù)執(zhí)行完,里面的變量就可以被銷毀,其占用內(nèi)存被釋放。>

3.垃圾回收方式?

答:常用的是標記清除:這樣操作:一個變量-->進入環(huán)境(被標記,有此標記為不能被清除)-->執(zhí)行-->離開環(huán)境(被標記,這個標記告訴機制能被清除)-->回收機制一段周期后,變量被清除。>

4.為什么還要管理內(nèi)存?

答:分配給web瀏覽器的內(nèi)存比桌面的應用的內(nèi)存少,這是出于安全考慮,為了防止運行js的網(wǎng)頁耗盡系統(tǒng)內(nèi)存導致系統(tǒng)崩潰。所以,開發(fā)者發(fā)現(xiàn)一旦數(shù)據(jù)不再用時,就將其值設為null來釋放其引用(解除引用),這做法適用于全局變量和全局對象屬性。>

Javascript引擎基礎(chǔ)GC方案是(simple GC):mark and sweep(標記清除),即:
(1)遍歷所有可訪問的對象。
(2)回收已不可訪問的對象。

和其他語言一樣,javascript的GC策略也無法避免一個問題:GC時,停止響應其他操作,這是為了安全考慮。而Javascript的GC在100ms甚至以上,對一般的應用還好,但對于JS游戲,動畫對連貫性要求比較高的應用,就麻煩了。這就是新引擎需要優(yōu)化的點:避免GC造成的長時間停止響應。

GC優(yōu)化策略

(1)分代回收(Generation GC)
這個和Java回收策略思想是一致的。目的是通過區(qū)分“臨時”與“持久”對象;多回收“臨時對象”區(qū)(young generation),少回收“持久對象”區(qū)(tenured generation),減少每次需遍歷的對象,從而減少每次GC的耗時
(2)增量GC
這個方案的思想很簡單,就是“每次處理一點,下次再處理一點,如此類推”。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容