Js問題深究系列
阿新 • • 發佈:2020-06-29
1原型鏈
提取自本連結 mp.weixin.qq.com/s?__biz=MzU… 講的真的很明瞭。
2 事件冒泡與事件捕獲
- js事件流:先捕獲,其次處於目標階段,最後冒泡。
- 事件代理:設定一個事件來處理一堆事件。
- 阻止事件冒泡:1.event.stopPropagation(僅阻止冒泡)2.在事件中返回false(阻止整個事件)
- 阻止預設事件:event.preventDefault.
3、js操作dom
- 建立:create
- 新增:append
- 刪除:remove
- 替換:replace
- 插入:insert
- 查詢:getElementBy
4、陣列去重
- indexOf:返回元素在陣列中第一次出現的索引值
- includes:判斷陣列中是否包含此元素。
- sort:使用sort先排序,判斷此項和下一項是否相同,不同則push進新陣列
- Set:使用ES6新方法去重,可去重後的資料結構不是陣列,要使用擴充套件運算子將其轉為陣列。
5、嚴格模式(use strict)限制
- 變數必須宣告之後再使用(否則丟擲 ReferenceError)
- 禁止this指向全域性
- 為只讀屬性賦值會丟擲TypeError
6、call、apply、bind
- call和apply區別是傳參方式不同,apply可以傳陣列
- call和apply的第一個引數如果是null或者undefined,則this指向全域性。
- call和apply改變了this指向並執行了該函式。
- bind是改變this指向返回一個新的函式,之後再呼叫此函式this都指向bind繫結的第一個引數。
- 呼叫三種方法的若不是函式,則會報錯。
7、垃圾回收機制及記憶體管理
-
Javascript具有自動垃圾回收機制,也就是說,執行環境會負責管理程式碼執行過程中使用的記憶體。
- 原理:垃圾收集器會定期(週期性)找出那些不在繼續使用的變數,然後釋放其記憶體通常情況下有兩種實現方式:標記清除和引用計數
-
標記清除: js中最常用的垃圾回收方式就是標記清除。 當變數進入環境時,例如,在函式中宣告一個變數,就將這個變數標記為“進入環境”。從邏輯上講,永遠不能釋放進入環境的變數所佔用的記憶體,因為只要執行流進入相應的環境,就可能會用到它們。而當變數離開環境時,則將其標記為“離開環境”。
-
引用計數:是跟蹤記錄每個值被引用的次數。 當聲明瞭一個變數並將一個引用型別值賦給該變數時,則這個值的引用次數就是1。如果同一個值又被賦給另一個變數,則該值的引用次數加1。相反,如果包含對這個值引用的變數又取得了另外一個值,則這個值的引用次數減1。當這個值的引用次數變成0時,則說明沒有辦法再訪問這個值了,因而就可以將其佔用的記憶體空間回收回來。這樣,當垃圾回收器下次再執行時,它就會釋放那些引用次數為0的值所佔用的記憶體。
-
記憶體管理:js引擎基礎是GC方案,就是遍歷所有可訪問物件,回收已經不可訪問物件
- 優化:將可訪問物件分為臨時訪問物件和持久訪問物件,多回收臨時的,少回收持久的,這樣可以減少遍歷次數,省時。
遇到難點再新增,未完待續。。。。。。