前端面試題51----JS記憶體洩露

Rayshaan發表於2021-01-03

JS記憶體空間分為棧、堆、池(一般歸併到棧中)

  • 基本資料型別string、number、boolean、null、undefined儲存在棧中
  • 複雜資料型別object儲存在堆中
  • 常量存放在池中
  • js中分配的記憶體的生命週期為:記憶體分配->記憶體使用->記憶體回收

哪些操作會造成記憶體洩漏?

記憶體洩漏指任何物件在不再擁有或不需要它之後依然存在,即這部分記憶體用完之後並沒有返回到記憶體池。

  • setTimeout第一個引數是字串而不是函式的時候就會造成記憶體洩漏
  • 閉包
  • 控制檯日誌
  • 迴圈(兩個物件彼此引用且彼此保留)
  • 全域性變數
    如果你不斷的建立全域性變數,不管有沒有用到他們,他們都將滯留在程式的整個執行過程中。
  • 事件監聽器
    在頁面中建立事件監聽器,但是在頁面跳轉時,又忘記移除這些監聽器,那麼也可能導致記憶體洩漏。

參考自:參考

相關文章