3. 閉包_物件組合繼承模式_事件輪詢機制
阿新 • • 發佈:2018-12-30
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(
3. 事件輪詢機制
js 主執行緒從事件佇列中迴圈取出回撥函式放入執行棧中處理(一個接一個)
作用: 執行非同步的回撥函式
過程:
js主執行緒執行全域性程式碼時,
當遇到了定時器會交給分執行緒管理(分執行緒會開始計時,到點了就將回調函式新增到事件佇列中)
當遇到 DOM 事件會交給分執行緒管理(給頁面元素繫結事件,一旦使用者觸發,就會將回調函式新增到事件佇列中)
一直到執行完所有全域性程式碼,主執行緒會開始輪詢事件佇列,一個接一個的取出回撥函式執行。