一、談談閉包? (產生條件、是什麼、在哪裏、做用、生命週期、缺點)chrome
產生閉包的三個條件:閉包
包含被引用的局部變量的一個"對象", 經過 chrome 開發者工具能夠調試查看到,就是 closure,它存在嵌套的內部函數中異步
做用: 延長了局部變量的存活時間, 讓函數外部能夠操做(讀寫)到函數內部的數據(變量/函數)函數
閉包的生命週期:工具
產生 : 在嵌套內部函數定義執行完時就產生了(不是在調用)this
死亡 : 在嵌套的內部函數成爲垃圾對象時spa
缺點:prototype
函數執行完後, 函數內的局部變量沒有釋放, 佔用內存時間會變長線程
容易形成內存泄露調試
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 事件會交給分線程管理(給頁面元素綁定事件,一旦用戶觸發,就會將回調函數添加到事件隊列中)
一直到執行完全部全局代碼,主線程會開始輪詢事件隊列,一個接一個的取出回調函數執行。