閉包(Closure)的基本概念
- 詳細內容
- 分類:Javascript
- 發佈:2013-06-25, 週二 23:01
- 點擊數:3186
閉包(Closure)的基本概念:
閉包(Closure)算是在Javascript中比較高階的應用了,不過它基礎其實也不算太難懂。只是用起來很可以複雜XD。閉包其實也是函式,不過它比較特的的是它擁有一組特殊的環境變數--本來以為應該消失,可是卻依然存在的變數。在Mozilla的MDN中對閉包的解釋:
" A closure is a special kind of object that combines two things: a function, and the environment in which that function was created",閉包是個特殊的物件,他包含了一個函式,以及函式被建立時所在的環境。所謂的環境是:" 環境由任意的局域變數所組成,這些變數是由在閉包建立的時間點上存在於作用域裡的所有變數"。有些難懂,不過沒關係,繼續往下看看例子。
閉包(Closure)的形成:
<script type="text/javascript"> function closure_test(){ var x="Welocme to Javascript"; return function (){alert (x);} } var y =closure_test(); y(); </script>
這範例沒啥特別的,只是傳回的值是一個函式。這函式還存取了函式本身所在的作用域中的變數x。仔細看這x,x因為在函式closure_test()中,照理講,當呼叫完closure_test()後就該消失。可是,神奇的是範例中的y()函式依然能使用該變數。現在跟上邊講的合在一起, x就是那個以為該消失卻沒消失的變數。closure_test()的函式作用域就是上面提到的"環境",所以函式y()+環境就是所謂的閉包。
換個方法說,其實閉包就意味著函式有個保護罩,用來保護函式所要使用的變數不會被系統給釋放掉。
閉包(Closure)的使用:
這範例會建立一個對使用者說出特定訊息的函式。
<script type="text/javascript"> function showmsg(msg){ return function (user){return user+"注意:"+msg;} } var y =showmsg("有人舉報你使用非法程式"); var z =showmsg("請回答下列問題"); document.writeln(y("維克")); document.writeln("<br/>"); document.writeln(z("維克")); document.writeln("<br/>"); document.writeln(y("騎豬飛上天")); document.writeln("<br/>"); document.writeln(z("騎豬飛上天")); document.writeln("<br/>"); </script>
輸出:
維克注意:有人舉報你使用非法程式
維克注意:請回答下列問題
騎豬飛上天注意:有人舉報你使用非法程式
騎豬飛上天注意:請回答下列問題
按個讚!~支持本站!~