闭包作用域探究小例
今天一位網(wǎng)友問(wèn)了一個(gè)閉包的問(wèn)題,做了以下實(shí)驗(yàn)如下:
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>閉包作用域探究</title></head><body><script type="text/javascript">function a(){var i = 0;return function b(){return ++i;}}var c = a();document.write(c()+'<br/>');//1document.write(c()+'<br/>');//2document.write(c()+'<br/>');//3var d = a();document.write(d()+'<br/>');//1document.write(c()+'<br/>');//4</script></body> </html>很多人把高級(jí)語(yǔ)言的垃圾回收機(jī)制用到對(duì)閉包的解釋中,我覺(jué)得如果從作用域的概念來(lái)理解閉包可能更容易一些,下面是我從作用域角度來(lái)解釋上面的實(shí)驗(yàn)結(jié)果:
1、對(duì)于函數(shù)(function)我的理解是“你調(diào)不調(diào)用他都在那里,不離不棄”;
2、每個(gè)函數(shù)都是個(gè)孩子,每個(gè)孩子都有個(gè)家(就是函數(shù)作用域);
3、孩子可以用家里的東西(使用所屬作用域的變量和函數(shù),就像 i ,當(dāng)然可以在 i 所在的位置來(lái)定義一些函數(shù)供這位孩子b來(lái)調(diào)用);
4、每家的孩子都只能供這個(gè)家來(lái)使喚,比如讓這孩子叫爸爸(每個(gè)作用域,或者每個(gè)實(shí)體,就像例中的c和d都只能調(diào)用自己的b方法);
5、孩子如果打碎了家里的玻璃,那這家的玻璃就碎掉一塊,要是再打一次那就又碎掉一塊(每調(diào)用一次c的b方法,c的 i 就會(huì)改變一次);
6、家家有本難念的經(jīng),但是各念各的經(jīng)(調(diào)用d 的 b方法改變的是d的 i 的值,不會(huì)對(duì)c 的 i 的值有影響);
7、每家的孩子在學(xué)校都代表這個(gè)家庭,但只是代表,除了這個(gè)孩子他背后有一個(gè)家庭在影響他,孩子的表現(xiàn)很大程度是受家庭環(huán)境影響的(當(dāng)調(diào)用 c()時(shí)其實(shí)是調(diào)用a的一個(gè)實(shí)例(這里就是實(shí)例c)的b方法,所以c()的表現(xiàn)是受所在作用域的影響的)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/longze/archive/2013/05/24/3096527.html
總結(jié)
- 上一篇: HDU 1033 水题
- 下一篇: 琐碎知识