亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

閉包?反正看完我就懂了

sean / 735人閱讀

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

閉包?反正看完我就懂了

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

什么是閉包??

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

get閉包

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

菜來了!?

閉包只要記住:

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

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

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

閉包可以保持對定義時的作用域的引用,使之不被銷毀,長生不老。

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

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

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

這看起來應(yīng)該就是閉包吧,不,確切地說它不是。因為bar()嵌套在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()本身當作一個值類型進行傳遞。其實這個閉包的產(chǎn)生過程可以理解為在里面的匿名函數(shù)定義時正處于懷孕階段,到外面f()調(diào)用時,娃就出生了,娃就是閉包啦。

不一般的閉包

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

function foo(){
    var a=2;

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

把內(nèi)部的函數(shù)baz傳遞給bar,當調(diào)用這個內(nèi)部函數(shù)時(現(xiàn)在叫fn()),它涵蓋的foo()內(nèi)部作用域就出來了,因為它能夠訪問a.

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

將一個內(nèi)部函數(shù)(名為timer)傳遞給setTimeout(...)。timer具有涵蓋wait(...)作用域的閉包,還保留著對變量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)里面,我們在每個迭代過程中都創(chuàng)建了一個閉包作用域,且作用域內(nèi)定義了變量,進行了賦值。閉包改變了變量的生命周期,變量將得到永生。

小結(jié):

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

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84566.html

相關(guān)文章

  • JS 中的閉包是什么?

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

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

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

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

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

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

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

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

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<