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

我以為自己懂閉包,直到遇見了它的真面目

開發 前端
簡單來說,閉包是函數與其聲明時所處的詞法環境(也就是外部作用域變量的引用)的結合體。換句話說,閉包讓函數可以訪問其外層作用域中的變量,即使外層作用域已經執行結束。

每個 JavaScript 開發者都認為自己理解閉包,直到他們發現其實并非如此。

閉包是個看似簡單,但一不小心就會出現意外行為的概念。

我自認為已經掌握閉包,結果碰到了意想不到的問題。

接下來,我們一起好好剖析一下閉包。

閉包到底是什么?

簡單來說,閉包是函數與其聲明時所處的詞法環境(也就是外部作用域變量的引用)的結合體。

換句話說,閉包讓函數可以訪問其外層作用域中的變量,即使外層作用域已經執行結束。

閉包 = 函數 + 它所“保留”的詞法作用域。

聽起來很直觀吧?

來看個經典例子:

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

const fn = outerFunction();
fn(); // 0

盡管 outerFunction() 已經執行完畢并返回,innerFunction() 仍能訪問 count。這就是閉包的魔力。

復雜部分:循環里的閉包陷阱

如果閉包這么簡單,大家不會頭疼。

問題出在循環里。

假設你想在循環中創建函數數組,每個函數打印它在循環中的索引。

你猜會輸出什么?

const funcs = [];
for (var i = 0; i < 3; i++) {
  funcs.push(() => console.log(i));
}
funcs[0](); // ?
funcs[1](); // ?
funcs[2](); // ?

如果你猜是 0 1 2,恭喜你,錯了。

實際輸出是:

3
3
3

這是什么情況?

原因和解決方案

問題在于:

var i 是函數作用域,不是塊級作用域。當函數執行時,循環已經結束,i 的值變成了3。

解決方案一:用 let 替代 var

let 是塊級作用域,每次循環都會捕獲一個新的 i

const funcs = [];
for (let i = 0; i < 3; i++) {
  funcs.push(() => console.log(i));
}
funcs[0](); // 0 ?
funcs[1](); // 1 ?
funcs[2](); // 2 ?

這樣問題迎刃而解。

解決方案二:使用立即執行函數表達式(IIFE)

如果只能用 var,用 IIFE 創建單獨作用域:

const funcs = [];

for (var i = 0; i < 3; i++) {
  (function(index) {
    funcs.push(() => console.log(index));
  })(i);
}

funcs[0](); // 0 ?
funcs[1](); // 1 ?
funcs[2](); // 2 ?

每個 IIFE 都“凍結”了當時的 i 值,保證正確輸出。

閉包在實際開發中的用武之地

閉包不僅是理論,更是日常開發中不可或缺的工具。

1. 數據隱私(封裝)

想要創建私有變量?閉包幫你實現。

function createCounter() {
  let count = 0;
  return {
    increment: () => count++,
    getCount: () => count
  };
}

const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // 1 ?

count 不可被外部直接訪問,實現了私有狀態。

2. 記憶狀態的事件監聽器

事件監聽器需要記住狀態時,閉包非常實用。

function attachListener(buttonId) {
  let clicks = 0;
  document.getElementById(buttonId).addEventListener("click", () => {
    clicks++;
    console.log(`按鈕被點擊了 ${clicks} 次`);
  });
}

attachListener("myButton");

即使 attachListener() 已執行完,事件回調依舊能訪問和更新 clicks

常見閉包誤區

  • 誤區一:以為閉包會復制變量 閉包其實保存的是變量的引用,變量變了閉包看到的也變(這也是循環陷阱的根源)。
  • 誤區二:閉包導致內存泄漏 如果閉包引用了大型對象,可能阻止垃圾回收,導致內存泄漏。

示例:

function createLeakyFunction() {
  let hugeObject = new Array(1000000).fill("??");
  return () => console.log(hugeObject.length);
}

const leaky = createLeakyFunction();
// hugeObject 仍在內存中

解決辦法是及時釋放引用:

function createLeakyFunction() {
  let hugeObject = new Array(1000000).fill("??");
  return () => {
    console.log(hugeObject.length);
    hugeObject = null; // 釋放內存
  };
}

你真的理解閉包了嗎?

閉包是 JavaScript 中最容易被誤解的概念之一,但一旦掌握,你會在無數場景發現它的身影。

無論是狀態管理、循環問題,還是封裝邏輯,閉包都給你強大能力——前提是用得正確。

重點總結

  • ?? 閉包讓函數能訪問其外層作用域的變量。
  • ?? 用 var 循環時要注意閉包陷阱,優先用 let 或 IIFE。
  • ?? 閉包適合實現私有變量、事件監聽狀態保持等場景。
  • ?? 留意閉包持有大對象引用,避免內存泄漏。

現在,去寫更干凈、更聰明的 JavaScript 吧!??


責任編輯:武曉燕 來源: 大遷世界
相關推薦

2020-08-11 08:13:46

微服務

2020-08-12 07:48:11

鏈表單向鏈結點

2025-08-18 01:15:00

2010-09-09 15:05:27

2020-03-11 08:19:27

JavaScript閉包開發

2010-06-23 10:24:42

Javascript閉

2009-08-08 09:11:25

Windows 7MSDN版

2017-12-12 09:18:38

DevOpsIT管理系統

2009-10-09 16:43:25

2010-07-07 09:28:25

云計算虛擬化

2019-05-05 09:24:09

KafkaTopicPartition

2019-08-13 09:29:14

Kafka運營數據

2021-03-09 07:37:42

技術Promise測試

2020-03-12 15:00:44

JavaSpring依賴

2011-04-29 09:51:05

投影機

2019-07-15 16:35:43

MySQL索引阿里

2025-03-27 10:13:03

2011-03-21 15:50:13

上網行為管理百卓網絡

2020-08-13 10:15:34

MySQL數據庫面試

2014-06-26 11:14:35

Google IO 2014
點贊
收藏

51CTO技術棧公眾號

亚洲天堂视频网站| 麻豆91蜜桃| 裸体武打性艳史| 免费欧美网站| 一区二区三区在线视频免费| 丁香婷婷久久久综合精品国产| 欧美大香线蕉线伊人久久| 一路向西2在线观看| 中文字幕在线观看欧美| 欧美成人中文| 精品噜噜噜噜久久久久久久久试看| 欧美午夜丰满在线18影院| 国产成人一区二区三区免费看| 国产成人在线免费观看视频| 日韩大片在线播放| 91精品在线麻豆| 亚洲精品日韩成人| 精品人妻一区二区三区四区不卡| 狠狠综合久久av一区二区老牛| 精品五月天久久| 成人免费视频91| 婷婷丁香花五月天| 日本亚洲欧美天堂免费| 欧美国产第一页| 一级黄色片国产| 免费av网站在线播放| 国产一区激情| 日韩av中文字幕在线| 欧美成年人视频在线观看| 国产黄色在线观看| 国产美女娇喘av呻吟久久 | 国产剧情精品在线| 久久久久久久久久久妇女| 欧美日本一区二区三区四区| 亚洲综合成人在线| 国产一区二区三区朝在线观看| 成年人网站免费看| 日韩欧美在线看| 久久伊伊香蕉| 日韩av播放器| 色综合天天综合网国产成人网| 国产亚洲精品91在线| 欧洲黄色一级视频| 婷婷国产在线| 国产成人精品免费在线| 国产大片精品免费永久看nba| 疯狂撞击丝袜人妻| 国产一区二区三区不卡视频网站| 亚洲国内精品在线| 99九九精品视频| 精品国产黄a∨片高清在线| 亚洲国产美女搞黄色| a级网站在线观看| 涩爱av在线播放一区二区| 国内精品久久久久影院色| 欧美激情精品久久久久久久变态 | 成人免费av资源| 国产色婷婷国产综合在线理论片a| 国产真实乱偷精品视频| 欧美黄色大片在线观看| 国产午夜精品一区二区三区| 污污内射在线观看一区二区少妇| 二区三区精品| 91久久精品一区二区三区| 国内精品国产三级国产99| 麻豆电影在线播放| 国产精品午夜久久| 亚洲最大免费| jyzzz在线观看视频| 99热在这里有精品免费| 国产一区免费在线| 亚洲欧美激情另类| 国产成人精品一区二| 国产成人综合精品在线| 日本成人一级片| 日韩精品一二区| 国产成人综合一区二区三区| 中国女人一级一次看片| 紧缚捆绑精品一区二区| 91精品视频在线看| 国产福利第一页| 成人美女在线观看| 免费在线观看91| 精品亚洲成a人片在线观看| 91亚洲精品一区二区乱码| 国产精品一区二区a| 全部免费毛片在线播放一个| 91亚洲男人天堂| 日韩久久久久久久久久久久久| yw193.com尤物在线| 久久免费偷拍视频| 亚洲春色在线| av片在线观看| 欧美日韩国产区| 国产精品wwwww| 9999精品| 亚洲精品一区在线观看| 日本精品一二三区| 韩日一区二区三区| 中文字幕亚洲激情| 成人免费毛片东京热| 亚洲精品二区三区| 久久久久国色av免费观看性色| 久久久综合久久| 久久精品综合| 亚洲xxxxx电影| 日本福利在线观看| 亚洲欧洲另类国产综合| 成年人网站免费视频| 欧洲精品一区二区三区| 精品国产乱码久久久久久影片| 国内精品久久99人妻无码| 久久国产精品亚洲人一区二区三区 | 亚洲综合色av| jizz国产在线观看| 国产在线一区二区综合免费视频| 亚洲va电影大全| 天天干视频在线| 中文字幕av不卡| 少妇高潮喷水在线观看| 九七影院97影院理论片久久| 亚洲黄色在线看| 久久久99999| 99视频一区| 国产精品一区专区欧美日韩| 香蕉人妻av久久久久天天| 国产精品美日韩| 国产一区二区三区精彩视频| 91视频亚洲| 精品欧美乱码久久久久久1区2区| 中国av免费看| 欧美1区2区| 国产在线观看不卡| 婷婷视频在线观看| 亚洲青青青在线视频| 50路60路老熟妇啪啪| 91免费精品国偷自产在线在线| 亚洲美女中文字幕| 国产尤物在线播放| 亚洲少妇一区| 国产乱码精品一区二区三区卡 | 国产一区二区三区色淫影院| yourporn在线观看中文站| 亚洲va在线va天堂| 一级片视频免费观看| 欧美性生活一级片| 中文字幕精品一区二区精品| www.av麻豆| 国产不卡在线播放| 超碰10000| 欧美办公室脚交xxxx| 欧美福利一区二区| 插我舔内射18免费视频| 欧美视频成人| 日韩免费不卡av| 欧日韩在线视频| 一区二区成人在线视频| 日韩性生活视频| 国产成人精品综合久久久久99| 国产剧情一区| 欧美一级免费视频| 天天干视频在线观看| 亚洲日韩欧美一区二区在线| 国产精品裸体瑜伽视频| 日韩中文在线| 欧美激情久久久久| 好男人www在线视频| 伊人性伊人情综合网| 黄大色黄女片18第一次| 成人免费a**址| 国产精品丝袜久久久久久不卡| 艳母动漫在线看| 欧美日韩综合视频网址| 69亚洲乱人伦| 欧美三级网页| 成人看片视频| 青春草在线视频| 亚洲成人av在线| 日本一级淫片色费放| 成人激情视频网站| 浮妇高潮喷白浆视频| 亚洲毛片免费看| 97视频在线观看视频免费视频| 人人妻人人澡人人爽久久av| 午夜精品爽啪视频| 私密视频在线观看| 性欧美xxxx大乳国产app| 久久久久久亚洲精品不卡4k岛国| 日韩欧美看国产| www.欧美免费| 国模私拍视频在线| 日本道免费精品一区二区三区| 亚洲欧美综合7777色婷婷| 韩国成人精品a∨在线观看| 色撸撸在线观看| 成人日韩av| 精品国产一区二区三区久久| 天天想你在线观看完整版电影免费| 国内精品久久久久久野外| 91成人在线观看喷潮| 免费看裸体网站| 国产一二三精品| 成人毛片视频网站| 色999日韩| 精品国产一区二区三区麻豆免费观看完整版| 精品众筹模特私拍视频| 日韩精品免费综合视频在线播放 | 视频二区欧美| 久久噜噜噜精品国产亚洲综合| 天天色综合av| 欧美色图天堂网| 日本中文字幕免费| 国产精品拍天天在线| 亚洲精品第三页| 亚洲一区久久| 日韩精品福利片午夜免费观看| 中文在线综合| 国产精品美女久久久久久免费| 中文国产字幕在线观看| 亚洲跨种族黑人xxx| 国产精品久久久久久久久久久久久久久久 | 性欧美欧美巨大69| 免费精品视频一区| 精品国模一区二区三区欧美| 日本久久精品视频| 日韩123区| 深夜福利一区二区| 国产在线青青草| 中文在线资源| 久久天堂电影网| 黄频网站在线观看| 欧美性一二三区| 制服.丝袜.亚洲.中文.综合懂色| 亚洲三级电影网站| 在线看片中文字幕| 久久综合九色欧美综合狠狠| 天天操精品视频| 99精品视频免费观看视频| xxxxxx在线观看| 成人激情诱惑| 茄子视频成人在线观看 | 一区二区三区四区不卡在线 | 国产成人av一区二区三区在线 | 亚洲精品网址| 日本一区二区在线| 蜜桃久久久久| 懂色av一区二区三区在线播放| 年轻的保姆91精品| 国产精品69久久| 日韩伦理电影网站| 欧美精品中文字幕一区| av网在线观看| 日韩精品视频三区| www.成人精品| 日韩三级免费观看| 国产女18毛片多18精品| 欧美日韩精品欧美日韩精品一| www.亚洲激情| 欧美亚洲一区二区在线| 成人h动漫精品一区二区下载| 亚洲品质自拍视频网站| 岛国毛片在线观看| 亚洲一区在线免费观看| 9999热视频| 亚洲天堂网中文字| 亚洲色图第四色| 久久久精品国产免大香伊| 少妇精品一区二区三区| 2021久久国产精品不只是精品| 香港三级日本三级| 成人精品小蝌蚪| 欧美做受喷浆在线观看| 99re这里只有精品视频首页| 亚洲熟妇一区二区三区| 久久亚洲影视婷婷| 亚洲精品一区二三区不卡| 欧美a视频在线观看| 色吊一区二区三区| 欧美bbbbbbbbbbbb精品| 欧美午夜电影在线| 中文 欧美 日韩| 欧美精品自拍偷拍动漫精品| 日韩av在线电影| 色香蕉成人二区免费| 亚洲 欧美 中文字幕| 精品日本高清在线播放| 中文字幕一区二区人妻痴汉电车| 91精品办公室少妇高潮对白| 97成人免费视频| 欧美一区二区网站| 色呦呦中文字幕| 这里只有精品在线观看| 九七久久人人| 国模gogo一区二区大胆私拍 | 青青草国产精品97视觉盛宴 | 国产喷水在线观看| 亚洲精品免费在线| 中国一级片在线观看| 亚洲午夜久久久| 中文字幕在线观看视频免费| 欧美性猛交xxxx乱大交蜜桃| 国产一区二区三区黄片| 精品少妇一区二区三区视频免付费| 亚洲春色一区二区三区| 精品视频偷偷看在线观看| 高清中文字幕一区二区三区| 亚洲人成电影网站色…| 免费网站免费进入在线| 久久成人精品视频| 后进极品白嫩翘臀在线播放| 国产精品99久久久久久www | 天天射—综合中文网| 男人天堂av片| 亚洲黄色影片| 91国内在线播放| 972aa.com艺术欧美| 91精品人妻一区二区| 中文字幕中文字幕一区| 中文字幕在线2021| 色噜噜狠狠成人网p站| 亚洲av无码乱码国产精品久久| 精品呦交小u女在线| 77777影视视频在线观看| 久久久久久久爱| 亚洲精品69| 2019国产精品视频| 四虎影视精品| 日韩一级特黄毛片| 国产精品主播| 性鲍视频在线观看| 国产精品日日摸夜夜摸av| 欧美成人片在线观看| 欧美唯美清纯偷拍| av中文字幕观看| 日韩中文字幕精品| 综合日韩av| 精品国产乱码久久久久软件 | 亚洲美女精品久久| 伊人电影在线观看| 国产精品爽爽爽| 国产欧美一区| 国产在线精品91| 国产麻豆视频一区二区| 免费a级黄色片| 亚洲成人资源网| 成人一二三四区| 欧美男女性生活在线直播观看| 成人免费视频| 国产精品99久久99久久久二8| 亚洲黄色录像| 男女啪啪免费观看| 国内外成人在线| 欧美手机在线观看| 欧美军同video69gay| 色婷婷中文字幕| 久久69精品久久久久久国产越南| 欧美在线se| 一区二区高清视频| 久久蜜桃精品| 国产xxx在线观看| 亚洲午夜精品网| 国产 日韩 欧美 综合| 久久69精品久久久久久久电影好 | 久草视频精品在线| 亚洲福利精品在线| 国产美女情趣调教h一区二区| 5g国产欧美日韩视频| 日韩免费av| 999久久久精品视频| 亚洲精品欧美综合四区| 国产a级免费视频| 欧美精品性视频| 偷窥自拍亚洲色图精选| 成年人观看网站| 国产三级一区二区| 国产精品欧美综合| 色婷婷综合久久久久| 欧美日韩视频免费看| 亚洲一区二区三区乱码| 精品在线播放免费| 九九在线观看视频| 亚洲国产精彩中文乱码av在线播放 | 日韩久久精品网| 亚洲精品手机在线观看| 一区二区三区日韩精品| 欧美一区二区在线观看视频| 日本成熟性欧美| 香蕉久久夜色精品国产更新时间| 六月婷婷激情网| 成人小视频在线观看| 国产九色在线播放九色| 亚洲天堂久久av| 国产成人免费av一区二区午夜| 国产一线二线三线女| 成人av资源网站| 天堂网一区二区| 精品自在线视频| 国产精品自在| 久久婷五月综合| 亚洲视频免费观看|