文章目錄

這篇應該算是scope的衍生…吧,主題是Closure

在上期[JS]scope — (1)
認識了js的作用域如何做判別,這次,因為scope衍生出另個名詞叫作Closure,我私心認為,
它們可以說是幾乎一模一樣的東西,嚴格說起差異,應該就是scope相當於是一種定義,closure
是因為scope而產生結果
,大概是這種感覺吧~!!而因為scope,除了closure以外,另一個微妙
的issue是memory leak,當然,memory leak這邊,我就有一大部份是…猜測的囉~w 而且,
這個部份也會根據瀏覽器的實作不同,而有差異喇~ = “””= 感覺研究起來實在太龐大了哩~有興趣
可以自己去搜尋一下,ㄜ…印象中有不少相關的文章。

我們來回顧一下,這是上期的第一個範例,如果尼了解這段程式,恭喜尼,其實尼已經知道什摸叫作
closure了,只是,對這個名詞還有點點陌生。(ㄜ… 這段例子我很像在很多地方都有看到類似的~
=”””= 是的,我抄襲~ Q 口Q 可我忘了在哪裡看到的了~sorry)

範例1
1
2
3
4
5
6
7
8
getAdd7Func = function() {
var a = 7;
return function(b) {
return a + b;
};
};
add7 = getAdd7Func();
add7(5); // 12

我所認為的closure,就是…有一個function,他可以得到別的function裡面的private data
以上述來說,在getAdd7Func裡面包的那個function可以得到a(=7),ㄜ… 其實這就是closure。

###效能

效能的話…原諒我偷懶噢~w 想更詳細的了解,可以試試看debugger,就…在code裡面加上
debugger就好了咧~(IE…應該,不行…吧~我想),然後,尼就可以看到,前輩們所謂的什摸…
call stack,scope啥的…那類的東西,應該可以有更深入的了解喇~ @ ..@

如果懶惰的話,就是…按照上期分析scope的方法,一樣可以達到同樣的功效喇,前題是…尼要有
正確的了解噢~w

這樣一來,尼就可以花現…為什摸會說,closure太多層,會有效能的問題,這摸說好了…

  • 如果在當層,尼有100個變數,尼要找的變數就在當層…最多最多,尼就找個1000次吧~w

  • 如果尼找的變數不在當層,尼就要往上層找,如果每一層我們都有1000個區域變數,尼找個n層…
    = . .= 可想而知了吧~

如果,這個變數又是要常常被存取到的….那尼就哉系阿~科科

###memory leak

memory leak的部份,我們承接上面,可以了解到…既然,應該會是需要額外去儲存這樣的data,
而且(基本上)沒有辦法被移除,然後,我們又都知道不管是哪種設備,其實都有限制memory的大小,
也就是說…,等到尼塞滿了,就會發生什摸記憶體不夠啦,memory leak啦,一堆奇奇怪怪的
message就會出現了。

那…想必大家就會疑惑了,這樣是不是代表,closure這種東西很糟糕,很難用,很討厭,很bala
bala。其實也不會喇~就是… 小心使用就是了,心裡有數,我想應該都不會有什摸問題,畢竟…
現在瀏覽器跟以前不一樣了呢~(握拳)

文章目錄