真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

分享js閉包

這篇文章主要講解了“分享js閉包”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“分享js閉包”吧!

創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、重慶網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對(duì)服務(wù)成都電動(dòng)窗簾等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場的競爭激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!

## 閉包

閉包是一個(gè)能讀取其他函數(shù)內(nèi)部變量的函數(shù):

1. 閉包是一個(gè)函數(shù)

2. 這個(gè)函數(shù)能讀取到其他函數(shù)內(nèi)部的變量(局部變量)

3. 他能讓讀取到的變量始終保存在內(nèi)存中

## 閉包的缺陷:

閉包函數(shù)讀取到的變量會(huì)一直保存在內(nèi)存中,不做處理地盲目使用很容易有內(nèi)存泄漏(內(nèi)存未釋放或無法釋放所造成的內(nèi)存浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢)的風(fēng)險(xiǎn)

## 案例

說了一堆,來點(diǎn)干貨

這個(gè)是從網(wǎng)上看到的一個(gè)案例

```

function fun(n,o){

  console.log(o);

  return {

    fun: function(m){

      return fun(m,n);

    }

  };

}

var a = fun(0);  // ?

a.fun(1);        // ?        

a.fun(2);        // ?

a.fun(3);        // ?

var b = fun(0).fun(1).fun(2).fun(3);  // ?

var c = fun(0).fun(1);  // ?

c.fun(2);        // ?

c.fun(3);

```

當(dāng)時(shí)我把代碼粘過來,邊看程序邊分析,把每一塊分析的過程都寫了下來

```

function fun(n, o) {

    console.log(o);

    return { // 這里返回一個(gè)對(duì)象,對(duì)象有個(gè)fun函數(shù)

        fun: function (m) { // 函數(shù)返回 調(diào)用fun 函數(shù)的返回值

            return fun(m, n);

        }

    };

}

var a = fun(0);  // ? 傳參時(shí)只傳了,所以n是,o為 undefined;a即為fun返回的對(duì)象

// a.fun() 就是閉包函數(shù),var a = fun(0)中的 n=0,o=undefined 都會(huì)常駐在內(nèi)存中

a.fun(1);        // ? 重新調(diào)用fun(n, 0),m = 1,n = 0,console.log(o),結(jié)果為

a.fun(2);        // ? 0

a.fun(3);        // ? 0

var b = fun(0).fun(1).fun(2).fun(3);  // ?  0 1 2

// 1. fun(0)為對(duì)象,此時(shí)的n = 0,o = undefined,輸出 undefined

// 2. 然后調(diào)用對(duì)象的fun(m),m = 1,返回值為調(diào)用外部fun(n, o)的返回值,n = 1, o = 0 而這個(gè)返回值又是一個(gè)對(duì)象,輸出

// 3. 然后又調(diào)用對(duì)象的fun(m),m = 2,返回值為調(diào)用外部fun(n, o)的返回值,n = 2, o = 1 而這個(gè)返回值又是一個(gè)對(duì)象,輸出1

// 4. 然后又調(diào)用對(duì)象的fun(m),m = 3,返回值為調(diào)用外部fun(n, o)的返回值,n = 3, o = 2 而這個(gè)返回值又是一個(gè)對(duì)象,輸出2

// 這里指的注意的是每次的n和o的值都不一樣,是因?yàn)樗麄兎謩e在不同的函數(shù)作用域內(nèi),這里每次都調(diào)用了一個(gè)新的fun(),開辟了一塊新空間

var c = fun(0).fun(1);  // ? undefined,

// 而這里兩次的結(jié)果都是1,因?yàn)樗麄兌际峭ㄟ^c這個(gè)對(duì)象調(diào)用的,就是說因?yàn)樗麄兌荚谕粋€(gè)函數(shù)作用域內(nèi)

c.fun(2);        // ?  1

c.fun(3);        // ?  1

```

分析的過程簡直是一場頭腦風(fēng)暴,稍不留神就會(huì)跑偏,總算寫完之后趕緊去對(duì)照他的答案(當(dāng)時(shí)并沒有跑一遍程序),結(jié)果發(fā)現(xiàn)`var b = fun(0).fun(1).fun(2).fun(3);`這里答案不一樣,他給的答案是`undefined, 0, 0, 0`,而我得到的結(jié)果是`undefined, 0, 1, 2`,我就又回頭看了一遍,覺得自己分析的沒問題啊,這時(shí)候突然想到我還沒跑一遍試試,于是抓緊跑一波,結(jié)果果然是站在我這邊的。

感謝各位的閱讀,以上就是“分享js閉包”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)分享js閉包這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)站題目:分享js閉包
文章出自:http://weahome.cn/article/gdpsij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部