91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分享js閉包

發布時間:2021-11-06 15:50:18 來源:億速云 閱讀:108 作者:iii 欄目:web開發

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

## 閉包

閉包是一個能讀取其他函數內部變量的函數:

1. 閉包是一個函數

2. 這個函數能讀取到其他函數內部的變量(局部變量)

3. 他能讓讀取到的變量始終保存在內存中

## 閉包的缺陷:

閉包函數讀取到的變量會一直保存在內存中,不做處理地盲目使用很容易有內存泄漏(內存未釋放或無法釋放所造成的內存浪費,導致程序運行速度減慢)的風險

## 案例

說了一堆,來點干貨

這個是從網上看到的一個案例

```

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);

```

當時我把代碼粘過來,邊看程序邊分析,把每一塊分析的過程都寫了下來

```

function fun(n, o) {

    console.log(o);

    return { // 這里返回一個對象,對象有個fun函數

        fun: function (m) { // 函數返回 調用fun 函數的返回值

            return fun(m, n);

        }

    };

}

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

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

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

a.fun(2);        // ? 0

a.fun(3);        // ? 0

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

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

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

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

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

// 這里指的注意的是每次的n和o的值都不一樣,是因為他們分別在不同的函數作用域內,這里每次都調用了一個新的fun(),開辟了一塊新空間

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

// 而這里兩次的結果都是1,因為他們都是通過c這個對象調用的,就是說因為他們都在同一個函數作用域內

c.fun(2);        // ?  1

c.fun(3);        // ?  1

```

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

感謝各位的閱讀,以上就是“分享js閉包”的內容了,經過本文的學習后,相信大家對分享js閉包這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節
推薦閱讀:
  1. JS閉包
  2. js閉包的理解

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

巨野县| 万安县| 永定县| 慈利县| 德阳市| 成武县| 新民市| 兴义市| 扬中市| 崇左市| 海伦市| 南丹县| 日喀则市| 黄梅县| 凉山| 宜黄县| 荥经县| 共和县| 无极县| 怀远县| 南岸区| 增城市| 秭归县| 登封市| 灵石县| 临猗县| 江孜县| 德昌县| 淮安市| 家居| 府谷县| 京山县| 海兴县| 朝阳区| 扶沟县| 增城市| 定兴县| 随州市| 泽普县| 普兰店市| 景泰县|