為什麼要講『閉包』呢,其實是因為 Windows 8 app 的 JavaScript 大多都是用閉包去寫的。
(以下內文可能有時候寫 closure 或是 閉包 或是 封包,不過都是指同樣的東西)
簡單講封包真的會講的很簡單...,老實說我也不是很懂啦,所以只能講『最基本』,再深就別問我了,因為我真的還不會...。
其實我不是很喜歡封包這個詞,因為從字義上實在搞不懂在幹嘛XDDD
不過封包封包,有個『包』字,就有點意象了,是不是有點像把什麼東西打包起來呢?
就好像把一顆顆散落的蕃茄撿起來用一個袋子裝起來一樣。
我問你,這樣是封包嗎?
答案:不是,因為沒有封閉...
var 總共幾袋番茄;
function 每五顆裝成一袋番茄(總顆數){
var 總共幾袋 = 總顆數/ 5;
}
怎麼把上面的版本變成封包?
首先先把他包在一個匿名function
function(){
var 總共幾袋番茄;
function 每五顆裝成一袋番茄(總顆數){
var 總共幾袋 = 總顆數/ 5;
}
}
最後再把這個匿名function放在()裡,這樣就是一個封包了。
(function(){
var 總共幾袋番茄;
function 每五顆裝成一袋番茄(總顆數){
var 總共幾袋 = 總顆數/ 5;
}
});
通常有時候我們會看到一種版本,
就是封包後面還有一個( )圓括弧的封包(ex:『就是在說我』那個位子),
這個()用來丟入(傳)其他東西進去給該封包用的。
(function(){
var 總共幾袋番茄;
function 每五顆裝成一袋番茄(總顆數){
var 總共幾袋 = 總顆數/ 5;
}
})(就是在說我);
像是,
把jQuery丟到一個封包,不過這例子沒有很好,因為封包裡面的code並沒有什麼地方會用到jquery的..
(function($){
var 總共幾袋番茄;
function 每五顆裝成一袋番茄(總顆數){
var 總共幾袋 = 總顆數/ 5;
}
})(jQuery);
不過以前會覺得困惑,我程式碼寫得好好的,沒事加這麼多括弧幹嘛
其實加個括弧不會太費工夫,而且可以避免程式被其他程式碼汙染到
因為一但你把一段程式碼給封包起來了,裡面的變數就變成了區域變數,跟全域變數完全不一樣的使用範圍。
換句話說,本來你房間沒鎖,誰都可以來拿理房間的番茄,這時你的番茄是全域的,誰都可以來拿,
但一旦你把房間給鎖了(封包),就只有你房間裡的人才能拿番茄。
我自己對封包並沒有很深入地瞭解,如果有任何錯誤煩請糾正><
感謝大家!
http://ithelp.ithome.com.tw/question/10029457 幾年前的參賽文,可以參考一下。
好的~謝謝您:)
封包以前大多是用在網路上,是Packet的翻譯詞.
closure翻譯成封包,似乎容易造成誤會.
也許改用"閉包",雖然我也不喜歡"閉包",但是好像因為左岸
也大量使用的關係,這個"閉包",現在幾乎是closure的翻譯詞了.
樓主可以參考一下.
封包我也覺得很像用在網路上的詞,謝謝
hitomitanaka提到:
也許改用"閉包",雖然我也不喜歡"閉包"
有"閉"應該就會有"開"吧
tecksin提到:
有"閉"應該就會有"開"吧
左岸用"解包",相對我們這邊"解壓縮".
壓縮他們用"打包".
解包可以參考百度百科這裡的說明:http://baike.baidu.com/view/639612.htm
剛才看到...以為是「那個」封包
對啊 我也覺得這樣會讓大家誤解,趕快把標題改了,不好意思
yiying大大...怎知~~莫非