闭包作用域探究小例
今天一位網友問了一個閉包的問題,做了以下實驗如下:
<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>很多人把高級語言的垃圾回收機制用到對閉包的解釋中,我覺得如果從作用域的概念來理解閉包可能更容易一些,下面是我從作用域角度來解釋上面的實驗結果:
1、對于函數(function)我的理解是“你調不調用他都在那里,不離不棄”;
2、每個函數都是個孩子,每個孩子都有個家(就是函數作用域);
3、孩子可以用家里的東西(使用所屬作用域的變量和函數,就像 i ,當然可以在 i 所在的位置來定義一些函數供這位孩子b來調用);
4、每家的孩子都只能供這個家來使喚,比如讓這孩子叫爸爸(每個作用域,或者每個實體,就像例中的c和d都只能調用自己的b方法);
5、孩子如果打碎了家里的玻璃,那這家的玻璃就碎掉一塊,要是再打一次那就又碎掉一塊(每調用一次c的b方法,c的 i 就會改變一次);
6、家家有本難念的經,但是各念各的經(調用d 的 b方法改變的是d的 i 的值,不會對c 的 i 的值有影響);
7、每家的孩子在學校都代表這個家庭,但只是代表,除了這個孩子他背后有一個家庭在影響他,孩子的表現很大程度是受家庭環境影響的(當調用 c()時其實是調用a的一個實例(這里就是實例c)的b方法,所以c()的表現是受所在作用域的影響的)
?
?
轉載于:https://www.cnblogs.com/longze/archive/2013/05/24/3096527.html
總結
- 上一篇: HDU 1033 水题
- 下一篇: 琐碎知识