您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“JavaScript閉包的含義是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“JavaScript閉包的含義是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
一 、詞法定義域 Lexical
Closure閉包是編程語(yǔ)言Lexical Scoping的專有屬性,區(qū)別于dynamic scoping。即函數(shù)執(zhí)行調(diào)用的是其在定義過(guò)程中的”變量定義域“,而非其在調(diào)用時(shí)候的變量定義域。
Javascript的函數(shù)的初始狀態(tài)不僅包括函數(shù)本體而且包括函數(shù)定義過(guò)程所在的定義域。
Like most modern programming languages, JavaScript uses lexical scoping. This means that functions are executed using the variable scope that was in effect when they were defined, not the variable scope that is in effect when they are invoked. In order to implement lexical scoping, the internal state of a JavaScript function object must include not only the code of the function but also a reference to the scope in which the function definition appears. This combination of a function object and a scope (a set of variable bindings) in which the function’s variables are resolved is called a closure in the computer science literature.
看下面的例子:
function makeCounter () { let counter = 0; return function() {return counter++;}; } let counter = makeCounter(); console.log(counter()); console.log(counter()); console.log(counter()); #+RESULTS: : 0 : 1 : 2
對(duì)這個(gè)嵌套函數(shù)而言,最有意思的一點(diǎn)是:當(dāng)外部函數(shù)被調(diào)用返回后(這里是makeCounter()), 再也沒(méi)有任何手段能夠觸及到 counter 這個(gè)變量。只有內(nèi)嵌函數(shù)擁有專屬權(quán)限抵達(dá)該變量。
二、Closure的標(biāo)準(zhǔn)定義
開發(fā)者通常應(yīng)該都知道“閉包”這個(gè)通用的編程術(shù)語(yǔ)。
閉包 是指內(nèi)部函數(shù)總是可以訪問(wèn)其所在的外部函數(shù)中聲明的變量和參數(shù),即使在其外部函數(shù)被返回(壽命終結(jié))了之后。在某些編程語(yǔ)言中,這是不可能的,或者應(yīng)該以特殊的方式編寫函數(shù)來(lái)實(shí)現(xiàn)。但是如上所述,在 JavaScript 中,所有函數(shù)都是天生閉包的(只有一個(gè)例外,將在 "new Function" 語(yǔ)法 中講到)。
也就是說(shuō):JavaScript 中的函數(shù)會(huì)自動(dòng)通過(guò)隱藏的 [[Environment]] 屬性記住創(chuàng)建它們的位置,所以它們都可以訪問(wèn)外部變量。
讀到這里,這篇“JavaScript閉包的含義是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。