国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

閉包?反正看完我就懂了

sean / 663人閱讀

摘要:閉包反正看完我就懂了想要好好的理解閉包,你得首先理解作用域。其實(shí)這個(gè)閉包的產(chǎn)生過程可以理解為在里面的匿名函數(shù)定義時(shí)正處于懷孕階段,到外面調(diào)用時(shí),娃就出生了,娃就是閉包啦。閉包改變了變量的生命周期,變量將得到永生。

閉包?反正看完我就懂了

想要好好的理解閉包,你得首先理解作用域。別說了,趕緊去看作用域吧,?,這世界就是如此殘酷。好,言歸正傳,我們是來學(xué)習(xí)閉包的。O(∩_∩)O

什么是閉包??

百度了一波,but理解不了哇。別怕,我來幫你。其實(shí),可以這樣理解的:魔術(shù)師的幕后藏著一個(gè)人,我們要揭開他的偽裝,偽裝之后的那個(gè)人是..知道你會(huì)說就是閉包了。閉包就是函數(shù)定義時(shí)的上下文環(huán)境。

get閉包

說了這么久,還不上菜,都快要餓死了。

菜來了!?

閉包只要記住:

閉包產(chǎn)生是:函數(shù)內(nèi)嵌套函數(shù);

閉包函數(shù)在外面被調(diào)用,訪問;

閉包可以訪問外部的變量,但是外部的變量不能訪問內(nèi)部;

閉包可以保持對(duì)定義時(shí)的作用域的引用,使之不被銷毀,長(zhǎng)生不老。

可能你又懵了,不怕,咱用實(shí)例來說話。

實(shí)例一:
function foo(){
    var a=2;

    function bar(){
        console.log(a);//2
    }
    bar();
}
foo();

這看起來應(yīng)該就是閉包吧,不,確切地說它不是。因?yàn)閎ar()嵌套在foo()內(nèi)部,這里并沒有在外面調(diào)用bar().

閉包來啦
var func=function(){
    var a=1;
    return function(){
        a++;
        alert(a);
    }
}
var f=func();
f();//閉包哇!

函數(shù)f()的詞法作用域能夠訪問func()的內(nèi)部作用域,然后把里面的匿名函數(shù)function()本身當(dāng)作一個(gè)值類型進(jìn)行傳遞。其實(shí)這個(gè)閉包的產(chǎn)生過程可以理解為在里面的匿名函數(shù)定義時(shí)正處于懷孕階段,到外面f()調(diào)用時(shí),娃就出生了,娃就是閉包啦。

不一般的閉包

有時(shí)候?qū)瘮?shù)類型的值進(jìn)行參數(shù)傳遞有很多種方法,但是不要方,當(dāng)他們?cè)趧e處被調(diào)用時(shí)仍然可以觀察到閉包。
看下面:

function foo(){
    var a=2;

    function baz(){
        console.log(a);//2
    }
    bar(baz);
}
function bar(fn){
 ? ?fn();//媽,閉包又來啦
}

把內(nèi)部的函數(shù)baz傳遞給bar,當(dāng)調(diào)用這個(gè)內(nèi)部函數(shù)時(shí)(現(xiàn)在叫fn()),它涵蓋的foo()內(nèi)部作用域就出來了,因?yàn)樗軌蛟L問a.

還有這樣的閉包
function wait(message){
    setTimeout(function timer(){
        console.log(message);
    },1000);
}
wait("Hello,closure!");

將一個(gè)內(nèi)部函數(shù)(名為timer)傳遞給setTimeout(...)。timer具有涵蓋wait(...)作用域的閉包,還保留著對(duì)變量message的引用。

循環(huán)和閉包
for(var i=1;i<=5;i++){
    (function(){
        var j=i;
        setTimeout(function trimer(){
            console.log(j);
        },j*1000);
    })();
}

在for循環(huán)里面,我們?cè)诿總€(gè)迭代過程中都創(chuàng)建了一個(gè)閉包作用域,且作用域內(nèi)定義了變量,進(jìn)行了賦值。閉包改變了變量的生命周期,變量將得到永生。

小結(jié):

閉包是隱藏在函數(shù)里面卻又很厲害的。相信你已經(jīng)理解了閉包,那么恭喜你,從某種意義上獲得了重生!
閉包其實(shí)是一種事實(shí),當(dāng)函數(shù)可以記住并訪問所在的詞法作用域,即使函數(shù)是在當(dāng)前詞法作用域之外執(zhí)行,這時(shí)就產(chǎn)生了閉包。閉包產(chǎn)生之后能夠涵蓋它所能訪問的詞法作用域。

好啦,講完啦,如果大家覺得有錯(cuò)誤或者改進(jìn)的地方歡迎指出,只求共同進(jìn)步。?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84566.html

相關(guān)文章

  • JS 中的閉包是什么?

    摘要:大名鼎鼎的閉包面試必問。閉包的作用是什么。看到閉包在哪了嗎閉包到底是什么五年前,我也被這個(gè)問題困擾,于是去搜了并總結(jié)下來。關(guān)于閉包的謠言閉包會(huì)造成內(nèi)存泄露錯(cuò)。閉包里面的變量明明就是我們需要的變量,憑什么說是內(nèi)存泄露這個(gè)謠言是如何來的因?yàn)椤? 本文為饑人谷講師方方原創(chuàng)文章,首發(fā)于 前端學(xué)習(xí)指南。 大名鼎鼎的閉包!面試必問。請(qǐng)用自己的話簡(jiǎn)述 什么是「閉包」。 「閉包」的作用是什么。 首先...

    Enlightenment 評(píng)論0 收藏0
  • ETM時(shí)間塔是做什么的,看完這篇文章你就懂了

    摘要:事件去年奪冠,王思聰抽獎(jiǎng)。終于說到今天的正題了時(shí)間塔是什么它是一個(gè)區(qū)塊鏈量子隨機(jī)數(shù)發(fā)生器。簡(jiǎn)單地說,時(shí)間塔從鏈上抽取數(shù)據(jù),通過一系列高級(jí)操作,生成隨機(jī)數(shù)時(shí)間塔和有什么關(guān)系時(shí)間塔是聯(lián)合知名高校科研機(jī)構(gòu)以及實(shí)驗(yàn)室共同開發(fā)的科研成果。 以前我一直認(rèn)為,人類的本質(zhì)是復(fù)讀機(jī)。實(shí)際上,我還是過于年輕了,現(xiàn)實(shí)的冷水,終于澆醒了我。 人類的本質(zhì),是鴿子。 為什么?你聽我說。showImg(https:...

    aisuhua 評(píng)論0 收藏0
  • 前端學(xué)習(xí)筆記之閉包——看了一張圖終于明白啥是閉包

    摘要:在一個(gè)閉包環(huán)境內(nèi)修改變量值,不會(huì)影響另一個(gè)閉包中的變量。直到看到函數(shù)閉包閉包這篇文章的代碼一部分,終于明白其中的邏輯了。 閉包 閉包定義:指擁有多個(gè)變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。函數(shù)內(nèi)部可以直接讀取全局變量。函數(shù)內(nèi)部變量無法在函數(shù)外部訪問。函數(shù)內(nèi)部聲明要用var或者let聲明,不然會(huì)變成全局變量鏈?zhǔn)阶饔糜颍鹤訉?duì)象會(huì)一級(jí)級(jí)向上尋找...

    andycall 評(píng)論0 收藏0
  • 阿里 2021 版最全 Java 并發(fā)編程筆記,完我懂了“內(nèi)卷”的真正意義

    摘要:純分享直接上干貨操作系統(tǒng)并發(fā)支持進(jìn)程管理內(nèi)存管理文件系統(tǒng)系統(tǒng)進(jìn)程間通信網(wǎng)絡(luò)通信阻塞隊(duì)列數(shù)組有界隊(duì)列鏈表無界隊(duì)列優(yōu)先級(jí)有限無界隊(duì)列延時(shí)無界隊(duì)列同步隊(duì)列隊(duì)列內(nèi)存模型線程通信機(jī)制內(nèi)存共享消息傳遞內(nèi)存模型順序一致性指令重排序原則內(nèi)存語(yǔ)義線程 純分享 , 直接上干貨! 操作系統(tǒng)并發(fā)支持 進(jìn)程管理內(nèi)存管...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<