摘要:每個家庭就好比一個閉包函數(shù)不同的家庭有不同的老婆老公孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。
定義
閉包是一個擁有許多變量和綁定了這些變量的環(huán)境的表達式(通常是一個函數(shù)),因而這些變量也是該表達式的一部分。。(百度百科)
案例解讀通俗的說:JavaScript中所有的function都是一個閉包
基本案例
function foo() { var i = 0; return function() { return ++i; } } var bar=foo();
這里的foo運行后返回了一個函數(shù),這個函數(shù)擁有一個自己私有的變量i,這個變量i不會因為foo運行結(jié)束了就被銷毀。
返回的這個函數(shù)被賦值給bar,這個bar就是一個閉包,它的特征是擁有自己的私有成員,該例子中私有成員是變量i,這個私有成員可以是一個函數(shù)
帶有循環(huán)的閉包
function foo() { var result = []; for (var i = 0; i < 10; i++) { result[i] = function(){return i}; } return result; } var bar = foo();
現(xiàn)象如上,原因是循環(huán)生成了10個閉包,但是,他們的私有成員i是他們共有的,當(dāng)最后一個閉包函數(shù)生成后,i的值已經(jīng)等于10,而前面的閉包的i都是這個i
循環(huán)生成閉包并且擁有真正的自己i
function foo() { var result = []; for (var i = 0; i < 10; i++) { result[i] = (function(i) { return function() { return i } })(i);仔細對比這里的區(qū)別 } return result; } var bar = foo();
總結(jié)顯然,循環(huán)生成的每個閉包都真正擁有的自己私有變量,解決辦法是代碼中的自執(zhí)行函數(shù)包裹需要生成的閉包函數(shù),并為閉包函數(shù)提供一個獨立的變量,這個時候它們的i是來自包裹它們的自執(zhí)行函數(shù)的參數(shù),而不是剛才的foo里面的那個i,所以它們各是各的
閉包的用途在我看來是為函數(shù)提供私有的變量,使得數(shù)據(jù)安全,不會污染別人的變量,別人的成員,別人的老婆。
每個家庭就好比一個閉包函數(shù),不同的家庭有不同的老婆、老公、孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78384.html
摘要:怎么理解這句話呢也就是說一個函數(shù)離開了創(chuàng)建時的作用域,但是其還是會和這個作用域以及這個函數(shù)外部的作用域相關(guān)聯(lián),也就是說變量依舊是那個變量以這個題目為參照,那么結(jié)果就很明了了。 var a = 2;var func = (function(){ var a = 3; return function(){ a++; console.log(a); } })(); func(...
摘要:簡要介紹閉包可謂是中的一大特色了,即使你對閉包沒概念,你可能已經(jīng)在不知不覺中使用到了閉包。這就是閉包的獨特之處。當(dāng)頁面中存在過多的閉包,或者閉包的嵌套很多很深時,會導(dǎo)致內(nèi)存占用過多。因此,在這里建議慎用閉包。 1. 簡要介紹 閉包可謂是js中的一大特色了,即使你對閉包沒概念,你可能已經(jīng)在不知不覺中使用到了閉包。閉包是什么,閉包就是一個函數(shù)可以訪問到另一個函數(shù)的變量。這就是閉包,解釋起...
摘要:所以,全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經(jīng)對執(zhí)行環(huán)境執(zhí)行環(huán)境對象變量對象作用域作用域鏈的理解已經(jīng)他們之間的關(guān)系有了一個較清晰的認識。 JavaScript中的執(zhí)行環(huán)境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關(guān)的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關(guān)的問題在面試中高頻出現(xiàn)。之前我也看過...
摘要:建筑的頂層代表全局作用域。實際的塊級作用域遠不止如此塊級作用域函數(shù)作用域早期盛行的立即執(zhí)行函數(shù)就是為了形成塊級作用域,不污染全局。這便是閉包的特點吧經(jīng)典面試題下面的代碼輸出內(nèi)容答案個如何處理能夠輸出閉包方式方式下一篇你不知道的筆記 下一篇:《你不知道的javascript》筆記_this 寫在前面 這一系列的筆記是在《javascript高級程序設(shè)計》讀書筆記系列的升華版本,旨在將零碎...
摘要:離開閉包的泥淖,給這個例子一個較為合理的寫法總結(jié)理解閉包的概念是重要的,但我們不應(yīng)當(dāng)過多的使用閉包,它有優(yōu)點,也優(yōu)缺點,是一把雙刃劍。 閉包 關(guān)于閉包,目前有如下說法: 閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合(MDN) 函數(shù)對象可以通過作用域鏈相互關(guān)聯(lián)起來,函數(shù)體內(nèi)部的變量都可以保存在函數(shù)作用域內(nèi)。這種特性在計算機科學(xué)文獻中被稱為閉包(JavaScript權(quán)威指南) 閉包,指的是詞...
閱讀 1563·2023-04-25 17:41
閱讀 3074·2021-11-22 15:08
閱讀 868·2021-09-29 09:35
閱讀 1635·2021-09-27 13:35
閱讀 3368·2021-08-31 09:44
閱讀 2743·2019-08-30 13:20
閱讀 1964·2019-08-30 13:00
閱讀 2587·2019-08-26 12:12