摘要:寫(xiě)文章之前,查閱了很多的資料,也看了很多大牛對(duì)閉包的解釋,現(xiàn)在總算是對(duì)閉包有了一定的理解。那么如果我們要訪問(wèn)中的該怎么辦呢這個(gè)時(shí)候就需要引入閉包了。閉包的作用閉包除了能訪問(wèn)函數(shù)內(nèi)部的局部變量,還有一個(gè)作用就是將函數(shù)內(nèi)部的變量值儲(chǔ)存到內(nèi)存中。
寫(xiě)文章之前,查閱了很多的資料,也看了很多大牛對(duì)閉包的解釋,現(xiàn)在總算是對(duì)閉包有了一定的理解。
作用域可能你會(huì)問(wèn):明明是講閉包,為什么又講作用域了? 在理解閉包之前我們首先要明白JavaScript中變量作用域的概念,我們都知道JavaScript的變量分為局部變量和全局變量,比如:
var global = 1; function f1() { var local = 2; console.log(global ) // 1 console.log(local) // 2 } console.log(global ) // 1 console.log(local) // local is not defined
在上面示例中g(shù)lobal是全局變量,因此可以在任何地方訪問(wèn)它,而local是定義在函數(shù)f1()中的局部變量,因此只能在f1()中訪問(wèn)。那么如果我們要訪問(wèn)f1()中的local該怎么辦呢? 這個(gè)時(shí)候就需要引入閉包了。
閉包的概念現(xiàn)在我們來(lái)說(shuō)什么是閉包,我所理解的閉包就是就是可以訪問(wèn)其他函數(shù)內(nèi)部的函數(shù)。同樣像前面的例子,我們現(xiàn)在就用閉包來(lái)實(shí)現(xiàn)在函數(shù)外部訪問(wèn)local變量
function f1() { var local = 2; function bar() { console.log(local++) } return bar } var func = f1(); func(); // 2 func(); // 3
這個(gè)時(shí)候我們相當(dāng)于通過(guò)函數(shù)bar()間接的訪問(wèn)到了函數(shù)f1()中的局部變量local,因此在func()第一次執(zhí)行的時(shí)候我們得到local=2,但是為什么第二次調(diào)用func()得到的local卻等于3呢? 按理說(shuō)我第二次調(diào)用func()應(yīng)該是從f1()中的第一句 var local = 2 開(kāi)始執(zhí)行啊。這就涉及閉包的另一個(gè)作用了。
閉包的作用閉包除了能訪問(wèn)函數(shù)內(nèi)部的局部變量,還有一個(gè)作用就是將函數(shù)內(nèi)部的變量值儲(chǔ)存到內(nèi)存中。
在上面的示例中,f1()的返回值是bar()函數(shù),我們調(diào)用func()的時(shí)候其實(shí)就是在調(diào)用bar(), 而bar()定義在f1內(nèi)部,是依賴f1()而存在的,因此調(diào)用bar時(shí)將f1()中的local變量放入了內(nèi)存中,在第二次調(diào)用的時(shí)候自然也就從內(nèi)存中得到了local++后的值。
本文參考文章:http://www.cnblogs.com/cxying... http://www.ruanyifeng.com/blo...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82869.html
摘要:到目前為止,我們完成了模塊的簡(jiǎn)易定義與使用。但是模塊化的一大精髓是命名空間,就是按需導(dǎo)入,而此時(shí)卻是一個(gè)全局變量。 為什么需要模塊化? 當(dāng)我們?cè)趆tml中調(diào)用一個(gè)js函數(shù)時(shí),如果我們把這個(gè)函數(shù)寫(xiě)在另外的一個(gè)js文件中,那么調(diào)用的時(shí)候我們需要在html的頭部引入那個(gè)js文件。 index.html Hello world index.js func...
摘要:但是,不合理地濫用閉包,也會(huì)造成很多性能問(wèn)題,從而使項(xiàng)目維護(hù)成本增加。 前言 相信很多小伙伴在工作或者面試過(guò)程中都遇到過(guò)這個(gè)問(wèn)題,作為經(jīng)典的前端面試題之一,它高頻地出現(xiàn)在我們的求職生涯中。所以,了解和掌握它也就變得十分必要了 讀完這篇文章,你或許就會(huì)知道: 閉包是什么,它是怎么形成的 為什么要使用閉包 閉包會(huì)造成哪些問(wèn)題 如果文章中有出現(xiàn)紕漏、錯(cuò)誤之處,還請(qǐng)看到的小伙伴多多指教,先...
摘要:而在中,表達(dá)式是對(duì)象,它們必須依附于一類特別的對(duì)象類型函數(shù)式接口。即表達(dá)式返回的是函數(shù)式接口類型。 Java8被稱作Java史上變化最大的一個(gè)版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達(dá)式和Stream API。這兩者也可以結(jié)合在一起使用。首先來(lái)看下什么是Lambda表達(dá)式。Lambda表達(dá)式,維基百科上的解釋是一種用于表示匿名函數(shù)和閉包的運(yùn)算符,感覺(jué)看到這個(gè)解釋...
摘要:個(gè)人前端文章整理從最開(kāi)始萌生寫(xiě)文章的想法,到著手開(kāi)始寫(xiě),再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫(xiě)好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開(kāi)始萌生寫(xiě)文章的想法,到著手...
閱讀 1074·2021-11-19 09:40
閱讀 2213·2021-11-15 18:00
閱讀 1267·2021-10-18 13:34
閱讀 2248·2021-09-02 15:40
閱讀 1533·2019-08-30 14:01
閱讀 1113·2019-08-30 11:11
閱讀 2482·2019-08-29 15:26
閱讀 722·2019-08-29 14:15