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
這個方案的思想很簡單,就是“每次處理一點,下次再處理一點,如此類推”。