js 閉包的理解

2021-09-24 00:10:57 字數 1351 閱讀 2531

閉包就是說,能夠讀取其他函式內部變數的函式。

其實這句話我不是很明白,因為我覺得閉包的作用是:

延遲函式執行

模擬私有變數

根據第二點的描述,應該是阻止其他東西訪問自身私有成員,到了這怎麼變成讀取其他函式內部變數了?反其道而行之?

不管定義了,看看最經典的這個例子

(延遲執行):

function count() );

}return arr;

}var results = count();

var f1 = results[0];

var f2 = results[1];

var f3 = results[2];

在函式內乙個陣列arr,用於儲存平方的匿名函式。在匿名函式裡,用到了前面的區域性變數i,這裡注意,這個匿名函式從始至終都沒有執行過,然而又用到了i,因此說i**獲了,不能釋放。

接下來f1 ~ f3被賦值了三個匿名函式。分別用來計算1、2、3的平方。

f1(); // 16

f2(); // 16

f3(); // 16

然後依次執行f1 ~ f3。結果居然都是16,而不是1、4、9。可以這麼理解,匿名函式要用到i,因此i**獲了,不能釋放,真正到執行的時候,才用到了i,這時候的i已經是4了。因此結果是16。

因此,可以讓他不要只是捕獲,而是捕獲順便就執行一下。

function count() 

})(i));}

return arr;

}

這裡利用了直接執行(function () {}) ();

(私有變數)

1 function createcounter(initial) 

7 }

8 }9 10 var counter1 = createcounter();

11 var counter2 = createcounter(10);

12 counter1.add();

13 counter1.add();

14 counter2.add();

15 counter2.add();

16 console.log(counter1.add()); // 3

17 console.log(counter2.add()); // 13

其中,變數x被隱藏了,外界無法訪問。

posted @ 2019-04-06 20:00

編輯收藏

JS閉包理解

下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...

JS閉包理解

js閉包理解 在很多面試題中都會問什麼是js的閉包,為什麼需要使用閉包,使用閉包的優缺點!我在面試其他人的時候也喜歡問這個問題,回答的也是千奇百怪,現在就總結一下我對閉包的理解。閉包是一種概念,這種概念比較複雜,很多地方的定義不盡相同,我的理解是 閉包是能讀取函式內部變數的函式,也就是定義在函式內部...

js閉包理解

什麼是閉包?這兩天我在網上翻閱了大量的閉包理解部落格,有優秀的也有生搬硬套的。歸根揭底,還是理解的問題。我曾經聽老師講閉包後,還是一臉疑惑,然後下課去網上查閱資料,仔細研究之後知道是裡面要套乙個函式返回父級變數。這次我就講解一下個人理解的閉包。為什麼會出現閉包?首先,我們先想下,我現在需要乙個一直用...