iT邦幫忙

DAY 18
12

用 HTML5 和 JavaScript 學習開發 Windows 8 Apps系列 第 17

Day18 簡單講閉包 closure

  • 分享至 

  • xImage
  •  

為什麼要講『閉包』呢,其實是因為 Windows 8 app 的 JavaScript 大多都是用閉包去寫的。
(以下內文可能有時候寫 closure 或是 閉包 或是 封包,不過都是指同樣的東西)

簡單講封包真的會講的很簡單...,老實說我也不是很懂啦,所以只能講『最基本』,再深就別問我了,因為我真的還不會...。
Orz
其實我不是很喜歡封包這個詞,因為從字義上實在搞不懂在幹嘛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);

不過以前會覺得困惑,我程式碼寫得好好的,沒事加這麼多括弧幹嘛
其實加個括弧不會太費工夫,而且可以避免程式被其他程式碼汙染到
因為一但你把一段程式碼給封包起來了,裡面的變數就變成了區域變數,跟全域變數完全不一樣的使用範圍。
換句話說,本來你房間沒鎖,誰都可以來拿理房間的番茄,這時你的番茄是全域的,誰都可以來拿,
但一旦你把房間給鎖了(封包),就只有你房間裡的人才能拿番茄。

我自己對封包並沒有很深入地瞭解,如果有任何錯誤煩請糾正><
感謝大家!


上一篇
Day17 [windows 8 app] 一直很不想面對的 default.js 檔案
下一篇
Day19 Split App (分割應用程式) 檔案目錄結構介紹
系列文
用 HTML5 和 JavaScript 學習開發 Windows 8 Apps30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
fillano
iT邦超人 1 級 ‧ 2013-10-03 01:58:09

http://ithelp.ithome.com.tw/question/10029457 幾年前的參賽文,可以參考一下。

yiying iT邦新手 1 級 ‧ 2013-10-03 21:13:47 檢舉

好的~謝謝您:)

0
一級屠豬士
iT邦大師 1 級 ‧ 2013-10-03 07:42:01

封包以前大多是用在網路上,是Packet的翻譯詞.
closure翻譯成封包,似乎容易造成誤會.
也許改用"閉包",雖然我也不喜歡"閉包",但是好像因為左岸
也大量使用的關係,這個"閉包",現在幾乎是closure的翻譯詞了.
樓主可以參考一下.

yiying iT邦新手 1 級 ‧ 2013-10-03 21:14:47 檢舉

封包我也覺得很像用在網路上的詞,謝謝筆記

鐵殼心 iT邦高手 1 級 ‧ 2013-10-03 22:02:47 檢舉

hitomitanaka提到:
也許改用"閉包",雖然我也不喜歡"閉包"

有"閉"應該就會有"開"吧開心

tecksin提到:
有"閉"應該就會有"開"吧

左岸用"解包",相對我們這邊"解壓縮".
壓縮他們用"打包".
解包可以參考百度百科這裡的說明:http://baike.baidu.com/view/639612.htm

0
老鷹(eagle)
iT邦高手 1 級 ‧ 2013-10-03 08:34:18

筆記拍手

yiying iT邦新手 1 級 ‧ 2013-10-03 21:15:32 檢舉

謝謝

0
SunAllen
iT邦研究生 1 級 ‧ 2013-10-03 21:25:43

剛才看到...以為是「那個」封包驚驚

yiying iT邦新手 1 級 ‧ 2013-10-03 21:37:07 檢舉

對啊 我也覺得這樣會讓大家誤解,趕快把標題改了,不好意思Orz

SunAllen iT邦研究生 1 級 ‧ 2013-10-03 21:38:33 檢舉

驚yiying大大...怎知~~莫非毆飛

yiying iT邦新手 1 級 ‧ 2013-10-04 00:06:19 檢舉

偷笑

我要留言

立即登入留言