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

一、談談閉包? (產生條件、是什麼、在哪裏、做用、生命週期、缺點)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 事件會交給分線程管理(給頁面元素綁定事件,一旦用戶觸發,就會將回調函數添加到事件隊列中)

一直到執行完全部全局代碼,主線程會開始輪詢事件隊列,一個接一個的取出回調函數執行。

相關文章
相關標籤/搜索