摘要:由于各種原因,我們需要在函數(shù)的外部調(diào)用函數(shù)內(nèi)部定義的局部變量。閉包的主要用處是把函數(shù)內(nèi)部的變量一直保存在內(nèi)存中可以省略該局部變量一直保存在內(nèi)存中該函數(shù)被賦予給全局變量,所以一直存在,該函數(shù)的外層函數(shù)因此也一直存在舉例
由于各種原因,我們需要在函數(shù)的外部調(diào)用函數(shù)內(nèi)部定義的局部變量。
閉包實(shí)際上就是“函數(shù)內(nèi)部的函數(shù)”,通過在函數(shù)內(nèi)部再定義一個(gè)函數(shù),內(nèi)部函數(shù)返回函數(shù)的局部變量,函數(shù)再返回內(nèi)部函數(shù)即可:
function outer() { var local = "local"; //局部變量 function inner() { return local; //使用內(nèi)部的函數(shù)返回這個(gè)局部變量 } return inner; //函數(shù)再返回內(nèi)部這個(gè)函數(shù) } var result = outer(); console.log(result()); //local 用兩個(gè)小括弧調(diào)用函數(shù)內(nèi)部的函數(shù)
上面的就是一個(gè)最簡單的閉包。只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,所以在函數(shù)內(nèi)部套用一個(gè)函數(shù)即可。
閉包的主要用處是把函數(shù)內(nèi)部的變量一直保存在內(nèi)存中:
var storage; //可以省略 function outer() { var local = "local"; //該局部變量一直保存在內(nèi)存中 storage = function () { //該函數(shù)被賦予給全局變量storage,所以一直存在,該函數(shù)的外層函數(shù)因此也一直存在 local += " storage;"; }; function inner() { return local; } return inner; } var result = outer(); console.log(result()); //local storage(); console.log(result()); //local storage
舉例:
var obj = { func1: function() { return function () { return this; //window{} }; }, func2: function() { return this; //obj{} } }; console.log(obj.func1()()); console.log(obj.func2());
var obj = { func1: function() { var that = this; return function () { return that; //obj{} }; }, func2: function() { return this; //obj{} } }; console.log(obj.func1()()); console.log(obj.func2());
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79141.html
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對(duì)閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:注此讀書筆記只記錄本人原先不太理解的內(nèi)容經(jīng)過閱讀你不知道的后的理解。作用域及閉包基礎(chǔ),代碼運(yùn)行的幕后工作者引擎及編譯器。 注:此讀書筆記只記錄本人原先不太理解的內(nèi)容經(jīng)過閱讀《你不知道的JS》后的理解。 作用域及閉包基礎(chǔ),JS代碼運(yùn)行的幕后工作者:引擎及編譯器。引擎負(fù)責(zé)JS程序的編譯及執(zhí)行,編譯器負(fù)責(zé)詞法分析和代碼生成。那么作用域就像一個(gè)容器,引擎及編譯器都從這里提取東西。 ...
摘要:對(duì)數(shù)組函數(shù)而言,相當(dāng)于產(chǎn)生了個(gè)閉包。關(guān)于對(duì)象在閉包中使用對(duì)象也會(huì)導(dǎo)致一些問題。不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向。由于聲明函數(shù)時(shí)與聲明函數(shù)時(shí)的值是不同的,因此閉包與閉包貌似將會(huì)表示各自不同的值。 這幾天看到閉包一章,從工具書到各路大神博客,都各自有著不同的理解,以下我將選擇性的抄(咳咳,當(dāng)然還是會(huì)附上自己理解的)一些大神們對(duì)閉包的原理及其使用文章,當(dāng)作是自己初步理解...
摘要:一閉包的概念閉包官方給出的解釋閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。解決此類情況的方式使用立即執(zhí)行函數(shù)使用中的這兩種方式的共性就是把變量變成了每個(gè)函數(shù)的局部變量,因此在執(zhí)行閉包的時(shí)候,局部變量不會(huì)發(fā)生變化。 一、閉包的概念 閉包官方給出的解釋:閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。 下面我們舉一個(gè)經(jīng)典的且最簡單的閉包demo function closure(){ var...
閱讀 883·2021-11-22 12:04
閱讀 2088·2021-11-02 14:46
閱讀 616·2021-08-30 09:44
閱讀 2098·2019-08-30 15:54
閱讀 715·2019-08-29 13:48
閱讀 1587·2019-08-29 12:56
閱讀 3441·2019-08-28 17:51
閱讀 3279·2019-08-26 13:44