1. 程式人生 > >3. 閉包_物件組合繼承模式_事件輪詢機制

3. 閉包_物件組合繼承模式_事件輪詢機制

1、談談閉包? (產生條件、是什麼、在哪裡、作用、生命週期、缺點)

產生閉包的三個條件:

  • 函式巢狀
  • 內部函式引用外部函式的區域性變數
  • 執行外部函式

包含被引用的區域性變數的一個"物件",  通過 chrome 開發者工具可以除錯檢視到,就是 closure,它存在巢狀的內部函式中

作用: 延長了區域性變數的存活時間, 讓函式外部可以操作(讀寫)到函式內部的資料(變數/函式)

閉包的生命週期:

產生 :  在巢狀內部函式定義執行完時就產生了(不是在呼叫)

死亡 :  在巢狀的內部函式成為垃圾物件時

缺點:

函式執行完後, 函式內的區域性變數沒有釋放, 佔用記憶體時間會變長

容易造成記憶體洩露

 

2.  物件組合繼承模式 (利用了 call 和 prototype)

  •     function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        Person.prototype.setName = function (name) {
            this.name = name;
        }
    
        function Son(name, age, sex) {
            Person.call(
    this, name, age); this.sex = sex; } Son.prototype = new Person(); Son.prototype.constructor = Son;

 

3. 事件輪詢機制

js 主執行緒從事件佇列中迴圈取出回撥函式放入執行棧中處理(一個接一個)

作用: 執行非同步的回撥函式

過程:  

js主執行緒執行全域性程式碼時,

當遇到了定時器會交給分執行緒管理(分執行緒會開始計時,到點了就將回調函式新增到事件佇列中)

當遇到 DOM 事件會交給分執行緒管理(給頁面元素繫結事件,一旦使用者觸發,就會將回調函式新增到事件佇列中)

一直到執行完所有全域性程式碼,主執行緒會開始輪詢事件佇列,一個接一個的取出回撥函式執行。