1. 程式人生 > 前端設計 >Js問題深究系列

Js問題深究系列

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方案,就是遍歷所有可訪問物件,回收已經不可訪問物件

    • 優化:將可訪問物件分為臨時訪問物件和持久訪問物件,多回收臨時的,少回收持久的,這樣可以減少遍歷次數,省時。

    遇到難點再新增,未完待續。。。。。。