前端週記20190211-20190215

1、靜態公有方法

(function(){
    var privateVariable=10;
    function privateFunction(){
        return false;
    }
    MyObject=function(){}
    MyObject.prototype.publicMethod=function(){
        privateVariable++;
        return this;
    }
})();
var a=new MyObject();
console.log(a.publicMethod());

MyObject在私有作用域中在原型上掛載了一個公有方法,可以訪問私有作用域中的變量。
思考:原型上的函數的作用域含有被添加時的作用域。
2、js運行機制(Event Loop)
分爲主線程和任務隊列,主線程爲空時,會讀取任務隊列中的事件(代碼)。
任務隊列是一個事件隊列,只要指定過回調函數的事件在事件發生時就會進入任務隊列。
回調函數:會被主線程掛起來的代碼,異步任務必須指定回調函數。
settimeout和setInterval是到設置的事件後才觸發回調函數,也就是添加到任務隊列中。這裏設置的時間是相對於在下一輪事件循環開始時的時間的間隔。這個時間是js執行到settimeout這個語句開始計算。h5中對時間標準化,最小4ms,不足則補齊
通過閱讀Promise/A+規範,可以得知異步的實現可分爲兩個機制,分別是macro-task和micro-task。
Macrotasks包括: script(整體代碼)、setTimeout, setInterval, setImmediate, I/O, UI Rendering;
Microtasks包括: process.nextTick, Promise, Object.observe, MutationObserver。
Macrotasks、Microtasks執行機制:
1.主線程執行完後會先到micro-task隊列中讀取可執行任務
2.主線程執行micro-task任務
3.主線程到macro-task任務隊列中讀取可執行任務
4.主線程執行macro-task任務
5....轉到Step 1
這裏注意的是,UI Rendering是在micro-task之後執行,需要在UI渲染之前執行的邏輯,一般採用micro-task異步回調方式進行調用
5、說明this幾種不同的使用場景
作爲構造函數執行
作爲對象屬性執行
作爲普通函數執行(window)
call、apply、bind

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章