最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【JS 田井中律】掌握 JavaScript 閉包和記憶化

2023-04-03 14:37 作者:哥倫布騎士  | 我要投稿

JavaScript Closures and Memoization

  • 閉包

JavaScript 閉包是現(xiàn)代 Web 開發(fā)中廣泛使用的一個重要概念。簡單來說,閉包允許函數(shù)記住和訪問它的詞法環(huán)境(?lexical environment),即使該函數(shù)是在其原始范圍之外執(zhí)行的。這個概念起初聽起來可能很復(fù)雜,但它是創(chuàng)建模塊化、高效和安全代碼的基本工具。在這篇文章中,我們將深入探討閉包并提供其用法的真實(shí)示例。

What?Why?什么是閉包

  • 閉包 -->?函數(shù)

閉包是一個函數(shù),可以訪問其外部(封閉)詞法環(huán)境中的變量。換句話說,它可以訪問其父函數(shù)中定義的變量參數(shù),即使該函數(shù)已完成執(zhí)行。這之所以成為可能,是因?yàn)?JavaScript 處理范圍的方式。

在 JavaScript 中,每個函數(shù)都會創(chuàng)建一個新的詞法作用域(lexical scope)。這意味著在函數(shù)內(nèi)聲明的任何變量只能在該函數(shù)的范圍內(nèi)訪問。但是,當(dāng)一個函數(shù)定義在另一個函數(shù)內(nèi)部時,內(nèi)部函數(shù)可以訪問外部函數(shù)的作用域,包括其中定義的任何變量或參數(shù)。這就是使閉包成為可能的原因。

How?閉包示例

讓我們看一個簡單的閉包示例。在此示例中,我們有一個名為?outerFunction?的函數(shù),它定義了一個名為?outerVariable?的變量。該函數(shù)還返回另一個函數(shù),我們稱之為?innerFunction?。?innerFunction?可以訪問?outerVariable?,即使它是在其自身范圍之外定義的。

在此示例中,我們調(diào)用?outerFunction?并將結(jié)果分配給名為?closure?的變量。?closure?現(xiàn)在是可以訪問?outerVariable?的函數(shù),即使?outerFunction?已完成執(zhí)行。當(dāng)我們調(diào)用?closure()?時,它會記錄“Hello, world!”到控制臺。

When?Where?閉包的真實(shí)場景

出于各種原因,閉包在現(xiàn)代 Web 開發(fā)中被廣泛使用。以下是閉包可能有用的一些真實(shí)場景

1)創(chuàng)建私有變量和方法??Private Variables and Methods

閉包可用于創(chuàng)建私有變量和方法。在 JavaScript 中,沒有內(nèi)置的方法來創(chuàng)建私有變量和方法。但是,通過使用閉包,我們可以創(chuàng)建只能在特定函數(shù)范圍內(nèi)訪問的變量和方法。

讓我們看一個例子:(是不是想到了ReactJS?的自定義鉤子)

在上面的示例中,我們有一個名為?counter?的函數(shù),它創(chuàng)建了三個內(nèi)部函數(shù):?increment?、?decrement?和?getCount?。這些內(nèi)部函數(shù)可以訪問在?counter?范圍內(nèi)定義的?count?變量,并且它們可以根據(jù)需要修改或返回它。結(jié)果是一個具有私有變量方法的“計數(shù)器”對象。

2)事件處理程序?Event Handlers

閉包可用于創(chuàng)建可以訪問特定數(shù)據(jù)的事件處理程序。這在處理異步代碼時特別有用,在異步代碼中變量可能會發(fā)生不可預(yù)測的變化。

這是一個例子:

jiy

3)記憶化?Memoization?

記憶化是一種用于通過緩存昂貴函數(shù)調(diào)用的結(jié)果并在相同輸入再次出現(xiàn)時返回緩存結(jié)果來優(yōu)化函數(shù)性能的技術(shù)。

下面是一個使用閉包的記憶示例:

在這個例子中,我們有一個名為?memoize?的函數(shù),它接受函數(shù)?func?作為參數(shù)。?memoize?返回一個可以訪問?cache?對象的新函數(shù)。當(dāng)使用某些參數(shù)調(diào)用記憶函數(shù)時,它會檢查結(jié)果是否已被緩存。如果有,則返回緩存的結(jié)果。如果沒有,它將使用提供的參數(shù)調(diào)用原始函數(shù),緩存結(jié)果并返回它。

小結(jié)

閉包是在 JavaScript 中創(chuàng)建模塊化、高效和安全代碼的基本工具。它們允許函數(shù)記住和訪問它們的詞法環(huán)境,即使它們是在它們的原始范圍之外執(zhí)行的。閉包可用于多種用途,包括創(chuàng)建私有變量方法、創(chuàng)建事件處理程序緩存。通過了解閉包以及如何有效地使用它們,開發(fā)人員可以編寫出更好、更高效、更易于維護(hù)和調(diào)試的代碼。

【JS 田井中律】掌握 JavaScript 閉包和記憶化的評論 (共 條)

分享到微博請遵守國家法律
临高县| 台南市| 奇台县| 光山县| 武宁县| 桦川县| 门头沟区| 磴口县| 佳木斯市| 沽源县| 北京市| 曲阳县| 武安市| 阜平县| 新营市| 东莞市| 托克托县| 大同市| 木里| 莱芜市| 乌苏市| 邻水| 金坛市| 瑞丽市| 海林市| 阳东县| 高要市| 红桥区| 雷波县| 佛教| 荔波县| 安新县| 达尔| 漳州市| 东源县| 昌乐县| 耒阳市| 盐源县| 旬邑县| 张家川| 兴隆县|