匿名函數(shù)和閉包

匿名函數(shù)丹喻,顧名思義是沒有函數(shù)名稱的函數(shù)。
我們先創(chuàng)建一個普通函數(shù):

//普通函數(shù)
    function fn(){
        alert("我是普通函數(shù)")
    }
fn() //調(diào)用

我們接著來看匿名函數(shù):

//匿名函數(shù) 懈玻,單獨的匿名函數(shù)無法使用,因為函數(shù)調(diào)用必須要用到函數(shù)名稱
    function (){
       alert("我是匿名函數(shù)")
    } //報錯

我們再來看看匿名函數(shù)的調(diào)用方法:
情況1.把匿名函數(shù)賦值給變量

    var fn1 = function(){
        alert("我是匿名函數(shù)被賦值給變量調(diào)用")
    }
    fn1();//我是匿名函數(shù)被賦值給變量調(diào)用

情況2.匿名函數(shù)自我調(diào)用,表達(dá)式的方式

    (function(){
        alert("我是匿名函數(shù)通過表達(dá)式自我執(zhí)行")
    })();
//我是匿名函數(shù)通過表達(dá)式自我執(zhí)行

再來看看匿名函數(shù)是如何傳遞參數(shù)的:
匿名函數(shù)傳遞參數(shù),調(diào)用方法與上面相同

//1.賦值給變量
   var fn2 =  function (num1,num2){
        alert(num1+num2)
    };
    fn2(1000,1000);
//2. 自我調(diào)用方法
    (function(num1,num2){
        alert(num1+num2)
    })(100,100);

什么是閉包呢?
閉包的概念:
閉包就是有權(quán)(訪問)付鹿,(另一個函數(shù)作用域)中(變量的函數(shù));
閉包可以簡單理解成“定義在一個函數(shù)內(nèi)部的函數(shù)“蚜迅。所以舵匾,在本質(zhì)上,閉包是將函數(shù)內(nèi)部和函數(shù)外部連接起來的橋梁谁不。
閉包的作用:
一個是前面提到的可以讀取函數(shù)內(nèi)部的變量坐梯,
另一個就是讓這些變量的值始終保持在內(nèi)存中,不會在調(diào)用后被自動清除刹帕。

閉包的概念不太好理解吵血,但是通過一些例子還是很好理解的;
閉包的用途1偷溺,讀取函數(shù)內(nèi)部的變量
例子1:

   function myfun(){

        return function (){

            return("你用閉包的方式訪問到我1")
        }
    }
    alert(myfun);    //輸出myfun整個函數(shù)表達(dá)式
    alert(myfun());  //輸出匿名函數(shù)表達(dá)式

  //閉包調(diào)用方式1
      alert(myfun()());

 //閉包調(diào)用方式2
     var a = myfun(); //賦值給變量
       alert(a())

例子2.通過閉包訪問局部變量

   function myfun2(){
        var a = "你用閉包的方式訪問到我2";
        return function (){
            return a;
        }
    }
    //閉包調(diào)用方式1
    alert(myfun2()())
    //閉包調(diào)用方式2
    var b = myfun2();
    alert(b());

通過上面兩個例子相信就大家就能看出來閉包的作用和使用方法蹋辅。是不是很簡單。
閉包的作用2
可以讓局部變量始終保持在內(nèi)存中
例子1:
首先來看簡單的累加應(yīng)用:

    var num = 1; //通過全部變量來實現(xiàn)
    function add() {
        alert(num++)
    }
    add();//1 每次調(diào)用的時候全局變量都會進(jìn)行++挫掏,這樣就實現(xiàn)了累加
    add();//2
    add();//3

我們在局部變量中看下:

    function add2(){
        var num2 = 1; //局部變量無法實現(xiàn)累加
        alert(num2++)
    }
    add2();
//1由于在局部變量中每次調(diào)用都會初始化num2=1侦另,所以就無法實現(xiàn)累加,這種情況下尉共,我們就得使用閉包
    add2();//1
    add2();//1

通過閉包的方式:

 function add3(){
        var num3 = 1;
        return function (){
            num3++;
            alert(num3)
        }
    }
//這種方式并不會實現(xiàn)累加褒傅,因為每次調(diào)用一次函數(shù),函數(shù)都會從上到下執(zhí)行一次袄友,num都會初始化一次
   // add3();//1 
   // add3();//1
   // add3();//1

來看看另一種閉包的調(diào)用方式

 var fun =add3();
//函數(shù)只在賦值的時候初始化一次殿托,接著后面在調(diào)用的時候執(zhí)行的是里面的匿名函數(shù),所以這種方法是可行的杠河。
    fun();//2
    fun();//3
    fun();//4

閉包的優(yōu)缺點:
優(yōu)點:可以將局部變量駐留在內(nèi)存中碌尔,可以避免全局變量浇辜。
全局變量會在復(fù)雜的程序中造成許多麻煩(命名沖突,垃圾回收)
缺點:由于閉包作用域返回的局部變量資源不會被立即銷毀回收唾戚,
可能會占用更多內(nèi)存柳洋,過度使用閉包會導(dǎo)致性能下降;
所以我們最好在使用完畢之后賦值null

fun=null;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叹坦,一起剝皮案震驚了整個濱河市熊镣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌募书,老刑警劉巖绪囱,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莹捡,居然都是意外死亡鬼吵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門篮赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來齿椅,“玉大人,你說我怎么就攤上這事启泣』两牛” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵寥茫,是天一觀的道長遣蚀。 經(jīng)常有香客問我,道長纱耻,這世上最難降的妖魔是什么芭梯? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮膝迎,結(jié)果婚禮上粥帚,老公的妹妹穿的比我還像新娘。我一直安慰自己限次,他們只是感情好芒涡,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卖漫,像睡著了一般费尽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上羊始,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天旱幼,我揣著相機與錄音,去河邊找鬼突委。 笑死柏卤,一個胖子當(dāng)著我的面吹牛冬三,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缘缚,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼勾笆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桥滨?” 一聲冷哼從身側(cè)響起窝爪,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎齐媒,沒想到半個月后蒲每,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡喻括,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年邀杏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片双妨。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡淮阐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刁品,到底是詐尸還是另有隱情,我是刑警寧澤浩姥,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布挑随,位于F島的核電站,受9級特大地震影響勒叠,放射性物質(zhì)發(fā)生泄漏兜挨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一眯分、第九天 我趴在偏房一處隱蔽的房頂上張望拌汇。 院中可真熱鬧,春花似錦弊决、人聲如沸噪舀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽与倡。三九已至,卻和暖如春昆稿,著一層夾襖步出監(jiān)牢的瞬間纺座,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工溉潭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留净响,地道東北人少欺。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像馋贤,于是被迫代替她去往敵國和親赞别。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容