精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:講一下閉包?內存泄露場景?循環(huán)引用為什么導致內存泄露?怎么判斷是否存在循環(huán)引用?

開發(fā) 前端
這篇文章就跟大家詳細的說一下關于閉包的問題,爭取可以做到讓大家看完這篇文章之后,對比閉包的問題可以順暢回答!

Hello,大家好,我是 Sunday。

在最近的中小廠面試中,【閉包】的問題被很多公司提到。如果單純說閉包是比較簡單的,一句話就可以說清楚:“可以訪問其他函數(shù)作用域中變量的函數(shù),就是閉包函數(shù)”。

但是,隨后延伸的問題,如:閉包造成內存泄漏的場景、循環(huán)引用為什么導致內存泄露?怎么判斷是否存在循環(huán)引用? 等問題,很多同學回答的并不好。

因此,這篇文章就跟大家詳細的說一下關于閉包的問題,爭取可以做到讓大家看完這篇文章之后,對比閉包的問題可以順暢回答!

1. 什么是閉包

閉包是指 函數(shù)在創(chuàng)建時保留了對其定義作用域的引用,即使函數(shù)執(zhí)行在其詞法作用域之外,也能訪問該作用域中的變量。

閉包在 JavaScript 中的常見表現(xiàn)形式是:函數(shù)嵌套函數(shù),內部函數(shù)訪問外部函數(shù)的變量。

由于 JavaScript 的函數(shù)是“第一類公民”,可以作為值返回、傳遞或保存,因此在外部函數(shù)返回后,閉包依然保留對外部變量的訪問權限。

function outerFunction() {
  let counter = 0;
  
  return function innerFunction() {
    counter++;
    console.log(counter);
  };
}

const increment = outerFunction();
increment(); // 輸出: 1
increment(); // 輸出: 2

在上述代碼中,innerFunction 是一個閉包,它可以訪問 outerFunction 中的變量 counter,即使 outerFunction 已經執(zhí)行完畢。

2. 閉包導致的內存泄露場景

在 JS 中,閉包有時會導致內存泄露,這是因為:閉包在訪問外部作用域的變量時會讓這些變量無法被垃圾回收,從而導致不必要的內存占用。

2.1. 常見的內存泄露場景

  • 未清理的事件監(jiān)聽:如果事件監(jiān)聽器引用了外部作用域中的變量,且在不需要時未移除,則會導致閉包一直存在,無法釋放內存。
function addEvent() {
  const element = document.getElementById('button');
  const someData = "Important data";
  element.addEventListener('click', function() {
    console.log(someData); // 閉包引用了外部變量 someData
  });
}

addEvent();
// 這里如果不手動移除事件監(jiān)聽器,則 someData 永遠不會被釋放,造成內存泄露
  • 定時器未清理:在定時器的回調函數(shù)中使用了閉包,但在不再需要時未清除定時器,導致回調函數(shù)及其引用的外部變量無法被回收。
function createTimer() {
  const largeData = new Array(10000).fill('*');
  setInterval(function() {
    console.log(largeData); // 定時器閉包持有 largeData 的引用
  }, 1000);
}

createTimer();
// 這里如果不清除定時器,largeData 將永遠無法釋放

3. 循環(huán)引用導致內存泄露

循環(huán)引用是指:兩個或多個對象相互引用,從而形成一個循環(huán)結構,導致垃圾回收器無法回收這些對象。

3.1. 為什么循環(huán)引用會導致內存泄露?

JS 的垃圾回收機制使用 標記清除(mark-and-sweep) 算法。即:垃圾回收器會從根對象(如全局對象)出發(fā),查找所有可達對象。

若對象形成了循環(huán)引用,且不再被根對象訪問,則垃圾回收器無法將其清除,這會導致這些對象長期保留在內存中,形成內存泄露。

function createCircularReference() {
  const objectA = {};
  const objectB = {};
  objectA.ref = objectB; // objectA 引用 objectB
  objectB.ref = objectA; // objectB 引用 objectA,形成循環(huán)引用
}

createCircularReference();
// 這里 objectA 和 objectB 都無法被回收

在這個示例中,objectA 和 objectB 互相引用,形成了循環(huán)引用。如果沒有外部引用它們,按理說可以被垃圾回收,但由于相互持有的引用,導致它們無法被清除,形成內存泄露。

4. 如何檢測循環(huán)引用

在項目中,如果出現(xiàn) 內存泄漏 的問題,那么可以通過以下方式進行檢查:

  • 手動檢測:在代碼中通過邏輯分析或使用 console.log 輸出檢查對象的相互引用關系。
  • 使用開發(fā)者工具檢測:現(xiàn)代瀏覽器的開發(fā)者工具提供了內存快照和堆分析,可以捕獲內存快照來分析內存的使用情況,幫助發(fā)現(xiàn)循環(huán)引用和內存泄露。在 Chrome 開發(fā)者工具中,可以通過 Memory(內存) 面板,使用 Heap Snapshot(堆快照)來查看對象的引用關系,并檢查是否有意外的循環(huán)引用。

圖片圖片

  • JSON.stringify 檢測:嘗試使用 JSON.stringify 序列化對象,如果對象中存在循環(huán)引用,JSON.stringify 會拋出 TypeError 異常,可以用這種方式簡單檢測循環(huán)引用(注意這種方法只能用于檢測較簡單的循環(huán)引用,復雜場景需結合其他方法)。
function hasCircularReference(obj) {
  try {
    JSON.stringify(obj);
    return false; // 無循環(huán)引用
  } catch (error) {
    return true; // 有循環(huán)引用
  }
}

const objectA = {};
const objectB = { ref: objectA };
objectA.ref = objectB;

console.log(hasCircularReference(objectA)); // 輸出: true
  1. WeakMap 弱引用:使用 WeakMap 結構管理對象引用。由于 WeakMap 的鍵是弱引用,不會影響對象的垃圾回收,可以通過 WeakMap 追蹤對象引用關系,并避免循環(huán)引用導致的內存泄露。

5. 如何避免循環(huán)引用導致的內存泄露

如果檢測出現(xiàn)內存泄漏的問題,那么可以通過以下方式嘗試解決:

  • 避免對象互相引用:在設計數(shù)據(jù)結構時,盡量避免互相引用,尤其是大的復雜對象。
  • 使用 WeakMap 或 WeakSet:在 JavaScript 中,WeakMap 和 WeakSet 是弱引用結構,存儲在 WeakMap 或 WeakSet 中的對象不會被阻止垃圾回收。可以使用 WeakMap 和 WeakSet 來存儲對象之間的引用關系,避免循環(huán)引用導致的內存泄露。
const weakMap = new WeakMap();
const objectA = {};
const objectB = {};

weakMap.set(objectA, objectB);
  • 在不需要時手動斷開引用:當對象不再使用時,可以手動將引用設為 null 或 undefined,確保垃圾回收器能夠正常回收它們。
let objectA = {};
let objectB = {};
objectA.ref = objectB;
objectB.ref = objectA;

// 當不再需要時,斷開引用關系
objectA.ref = null;
objectB.ref = null;


責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2025-05-22 09:35:24

2017-11-15 19:30:08

Python內存泄露循環(huán)引用

2017-12-11 11:00:27

內存泄露判斷

2016-09-08 16:16:26

iOS移動應用內存泄漏

2022-06-07 12:03:33

Java內存模型

2021-12-20 10:30:33

forforEach前端

2021-10-27 07:15:36

Go 循環(huán)引用

2022-10-18 08:38:16

內存泄漏線程

2024-03-13 07:53:57

弱引用線程工具

2024-02-22 15:36:23

Java內存模型線程

2025-03-10 07:05:07

2020-08-07 15:15:01

Java內存泄漏面試

2021-05-27 21:47:12

Python垃圾回收

2025-02-27 00:08:24

2023-09-12 14:56:13

MyBatis緩存機制

2021-04-19 18:56:58

大數(shù)字符串運算

2013-08-07 10:07:07

Handler內存泄露

2022-10-10 11:37:14

Gomap內存

2017-05-04 16:07:11

Tomcat內存泄露

2021-07-28 10:08:19

類加載代碼塊面試
點贊
收藏

51CTO技術棧公眾號

www在线观看黄色| 国产片在线播放| 一区二区三区视频免费观看| 色吊一区二区三区| 一区二区在线观| www.天堂在线| 日韩中文字幕亚洲一区二区va在线| 亚洲性视频网站| 亚洲男人天堂2021| 色网在线免费观看| 最新不卡av在线| 久久国产精品 国产精品| 这里只有精品6| 亚洲国产专区校园欧美| 一区三区二区视频| 蜜臀av粉嫩av懂色av| 色成人免费网站| 一区二区三区日韩| 午夜精品亚洲一区二区三区嫩草| 性做久久久久久久| 日本欧美一区二区三区| 久久久久久久999| 日韩av网站在线播放| 日韩电影不卡一区| 日韩午夜在线影院| 久久婷婷国产91天堂综合精品| 羞羞电影在线观看www| 国产偷v国产偷v亚洲高清| 97久久天天综合色天天综合色hd| www.com亚洲| 亚洲高清毛片| 欧美成人精品在线观看| www.99热| 九九久久电影| 亚洲国产另类 国产精品国产免费| 天堂av8在线| 成人国产精品| 色乱码一区二区三区88| 亚洲女优在线| 欧美大片在线观看| 亚洲视频一二三四| 精品国模一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 日韩精品综合在线| h片在线免费观看| 国产精品久久久久一区二区三区共| 欧美成熟毛茸茸复古| 亚洲乱码在线观看| 国产在线日韩欧美| 国产精品午夜国产小视频| 亚洲综合久久网| 国产欧美另类| 性色av一区二区三区免费| 久久国产一级片| 欧美日本精品| 欧美极品少妇xxxxⅹ免费视频 | 亚洲精品一区二区在线观看| 奇米777在线| 久久精品九色| 精品免费视频一区二区| 日本精品一二三| jizz18欧美18| 亚洲国产精品va在线看黑人动漫| 国模无码视频一区| 国产精品流白浆在线观看| 亚洲第一级黄色片| 国产视频久久久久久| 欧美黑人做爰爽爽爽| 日韩精品极品视频| 91视频在线网站| 欧美丝袜丝交足nylons172| 亚洲性xxxx| 婷婷社区五月天| 欧美精品国产| 97热精品视频官网| 中文字幕在线播| 日本午夜精品视频在线观看| 国产伦精品一区二区三区精品视频| 亚洲一区二区色| 国产麻豆精品在线观看| 成人久久一区二区| 丰满肉嫩西川结衣av| av电影天堂一区二区在线观看| 久久久久国产精品视频| wwwww在线观看免费视频| 中文字幕人成不卡一区| 国产91沈先生在线播放| 天堂网在线最新版www中文网| 欧美伊人精品成人久久综合97| 中文字幕国产免费| 国产精品久久久久久久久久白浆| 国产一区二区三区视频| 午夜写真片福利电影网| 亚洲一区二区毛片| 成人中心免费视频| 视频污在线观看| 国产精品久久久久久久久久免费看| 99re6这里有精品热视频| 日本在线影院| 欧美日韩一区二区三区四区| 欧美性猛交乱大交| 国产99久久精品一区二区300| 久久久国产一区二区三区| 日韩欧美国产亚洲| 久久国产三级精品| 精品国产一区二区三区久久久久久| 国产精品久久久久一区二区国产| 亚洲激情综合网| 91看片就是不一样| 日韩在线观看中文字幕| 国产一级揄自揄精品视频| 免费视频一二三区| 看片网站欧美日韩| 欧美二区在线| 搞黄网站在线看| 欧美日韩国产高清一区二区| 漂亮人妻被黑人久久精品| 99久久久久| 日本最新高清不卡中文字幕| 亚洲产国偷v产偷v自拍涩爱| 国产精品久久久久影院| 日韩精品免费播放| 卡通动漫国产精品| 欧美精品日韩www.p站| 波多野结衣一区二区三区四区| 国产传媒久久文化传媒| 一区二区三区在线观看www| 免费高潮视频95在线观看网站| 在线成人av影院| 波多野结衣a v在线| 搞黄网站在线观看| 亚洲国产成人精品女人| 欧美高清videos高潮hd| 一区二区的视频| 国产午夜精品一区二区三区视频| 国产综合中文字幕| 成人动漫视频| 欧美久久精品午夜青青大伊人| 国产精品露脸视频| 久久综合av免费| 久久综合九色综合88i| 一本一道久久a久久| 超在线视频97| 国产乱色精品成人免费视频| 国产精品狼人久久影院观看方式| 成人一区二区三| 欧美美乳视频| 国产成人精品网站| 国产一区二区三区福利| 色一区在线观看| 扒开jk护士狂揉免费| 久热精品在线| 青娱乐国产91| 91九色综合| 中文字幕精品av| 中文字幕乱码无码人妻系列蜜桃| 久久九九国产精品| 国产成人手机视频| 日韩欧美视频在线播放| 成人高清视频观看www| 蜜桃av在线免费观看| 欧美一区二区三区在线电影| 亚洲欧美一区二区三区四区五区| 国产乱子伦视频一区二区三区| 一本色道久久综合亚洲精品婷婷| 久久91视频| 久久99久久久久久久噜噜| 亚洲国产精品suv| 亚洲成人午夜电影| 无码人妻精品一区二区三区温州| 西西裸体人体做爰大胆久久久| 蜜桃欧美视频| 国产欧美自拍| 精品中文字幕在线| 性xxxx视频| 色成人在线视频| 黄色录像二级片| 成人97人人超碰人人99| 午夜精品久久久内射近拍高清| 欧洲杯半决赛直播| 99在线观看| 一本大道色婷婷在线| 国产小视频国产精品| 91片黄在线观看喷潮| 亚洲宅男天堂在线观看无病毒| 波多野结衣福利| 免费成人在线视频观看| 一本大道东京热无码aⅴ| 欧美天堂社区| 91精品国产自产在线| av老司机在线观看| 一区二区亚洲欧洲国产日韩| 国产成人毛毛毛片| 日韩欧美在线视频日韩欧美在线视频| 999精品久久久| 国产suv一区二区三区88区| 国产在线青青草| 婷婷亚洲五月色综合| 国产免费一区二区| 色综合久久久| 97在线免费视频| 日本成人在线播放| 日韩精品久久久久| 国产精品久久久久久无人区| 婷婷开心激情综合| 欧美一级片在线视频| 26uuu国产在线精品一区二区| 亚洲精品乱码久久久久久动漫| 99视频在线精品国自产拍免费观看| 亚洲第一导航| 巨人精品**| 亚洲自拍小视频| 亚洲一区二区三区四区| 久久久亚洲天堂| 日本美女在线中文版| 日韩精品中文字幕视频在线| 99热这里只有精品9| 91久久线看在观草草青青| 日韩污视频在线观看| 亚洲三级电影网站| 四虎成人免费影院| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲精品鲁一鲁一区二区三区| 美女视频一区在线观看| 日本熟妇人妻中出| 国产视频一区欧美| 婷婷五月综合缴情在线视频| 亚洲色图88| 亚洲伊人婷婷| 成人毛片免费看| 欧美精品一区在线发布| 欧美wwwsss9999| www国产亚洲精品| 成人国产精品久久| 国产精品美女久久久免费| 亚洲欧美一区二区三区| 国内精品视频久久| 高清电影在线观看免费| 欧美高清电影在线看| 国产精品剧情| 久久九九免费视频| 色老头视频在线观看| 日韩精品2区| 日本欧美在线视频| 国产伦理精品| 68精品国产免费久久久久久婷婷| 国产嫩草在线视频| 欧美激情第99页| 肉肉视频在线观看| 欧美激情一级欧美精品| 国精一区二区三区| 高清视频欧美一级| zzzwww在线看片免费| 97在线免费观看视频| 色在线视频观看| 日本中文字幕久久看| 在线成人视屏| 国产欧洲精品视频| 999精品嫩草久久久久久99| 亚洲qvod图片区电影| 日本一区二区三区播放| 97久久天天综合色天天综合色hd| 91成人入口| 精品卡一卡二| 美女久久久久| 五月天亚洲综合| 91精品国产自产拍在线观看蜜| 国产在线拍揄自揄拍无码| 欧美在线日韩| 欧美男女爱爱视频| 亚洲一区自拍| 国产一级做a爰片久久| 久久成人综合网| 午夜性福利视频| 91亚洲大成网污www| 午夜精产品一区二区在线观看的| 欧美国产日韩精品免费观看| 日本黄区免费视频观看| 亚洲精品国产成人久久av盗摄| 久久久精品91| 色婷婷久久久久swag精品| 18国产免费视频| 欧美一级理论片| 香蕉av在线播放| 中文字幕亚洲精品| 在线观看的网站你懂的| 青青久久av北条麻妃海外网| 久久99国产精品二区高清软件| 5566中文字幕一区二区| 天天做夜夜做人人爱精品 | 中文字幕av一区二区三区人| 相泽南亚洲一区二区在线播放 | 黄色一级视频免费看| 6080国产精品一区二区| 欧美视频一二区| 中文字幕亚洲图片| 牛牛精品视频在线| 国产精品高清网站| 哺乳挤奶一区二区三区免费看 | 激情成人在线观看| 99精品欧美一区二区三区小说| 一级肉体全黄裸片| 亚洲黄色av一区| 无码人妻久久一区二区三区 | 91精品国产91久久久久久不卡| 在线一区视频观看| 国产精品免费在线| 久久国产精品亚洲人一区二区三区| 久久这里只有精品8| 蜜臀va亚洲va欧美va天堂 | 第一区第二区在线| 吴梦梦av在线| 可以看av的网站久久看| 又大又长粗又爽又黄少妇视频| 国产精品欧美极品| 欧美一区二区三区四| 日韩欧美国产综合| 在线观看av的网站| 热99精品只有里视频精品| 色悠久久久久综合先锋影音下载 | 中文字幕一区二区av| 日韩av手机版| 91美女福利视频| www.av视频在线观看| 91精品国产色综合久久ai换脸| 国产中文字幕在线播放| 国内伊人久久久久久网站视频 | 亚洲最大的黄色网| 亚洲乱码国产乱码精品精可以看 | 日韩一区二区三区四区| 色哟哟免费在线观看 | 4438国产精品一区二区| 欧美精品一区二区久久婷婷| 看黄网站在线| 国产精品日韩专区| 国产精品自拍区| 啊啊啊一区二区| www.av精品| 亚洲国产精品成人无久久精品| 日韩视频中午一区| 超碰在线网址| 国产一区二区在线免费| 日韩成人激情| 中国黄色片免费看| 国产精品美女久久久久久久| 国产精品suv一区| 亚洲欧美国产va在线影院| 亚洲精品88| 日产精品高清视频免费| 久久av最新网址| www.黄色在线| 欧美日韩三级在线| 欧美成人视屏| 91丝袜美腿美女视频网站| 久久久久久久久国产一区| 99中文字幕在线| 一区二区在线看| 色呦呦中文字幕| 99久久国产综合色|国产精品| 国产精品人人妻人人爽人人牛| 久久久青草青青国产亚洲免观| 日韩欧美在线观看免费| 亚洲一级黄色av| 成人深夜福利| 黄黄视频在线观看| 国产99一区视频免费| 中文在线观看免费网站| 亚洲精品国精品久久99热一| xxxxx性欧美特大| 性高潮久久久久久久久| 九九视频精品免费| 久一视频在线观看| 日韩av在线导航| 国产福利91精品一区二区| 日本三级福利片| 成人国产电影网| 超碰在线观看91| 久久久国产视频| 欧美人妖视频| 污污的视频免费| 亚洲高清免费一级二级三级| 深夜福利在线看| 国产精品尤物福利片在线观看| 亚洲女同一区| 91精品人妻一区二区| 欧美日韩成人激情| 欧美寡妇性猛交xxx免费| 久久国产精品99久久久久久丝袜| 全部av―极品视觉盛宴亚洲| 日本黄色片免费观看| 亚洲精品999| 久久精品资源| 人妻久久久一区二区三区| 国产蜜臀av在线一区二区三区| www.国产黄色| 国产精品激情自拍| 欧美日韩一区自拍| 精品国产aaa| 亚洲第一精品电影| 亚洲国产精选|