今天練習的是Javascript裡非常重要的概念-“Closure(封裝)”
也就是和C#、JAVA等語言一樣,變數也能有Private、Public的差別!
先介紹 global variable(全域變數)和 local variable(私有變數)的差別:global variable
為直接宣告並隸屬於window物件的變數
1 | var a = 4; |
local variable
為宣告在function內的變數
1 | function myFunction() { |
這樣的方程式在合作開發時,由於其他人不知道你有設哪些變數,常常會造成變數衝突問題,如下:
1 | var counter = 0; |
尤其是大型專案很多JS檔,更容易發生錯誤,所以只好把全域變數變為私有變數:
1 | function add() { |
很明顯的,這樣一來每次call這個function時,counter又再次被設為0,所以這樣也行不通!因此就要使用inner function了:
1 | function add() { |
這樣一來counter就變為私有變數了,然而這樣要怎麼”呼叫”函式又變成另外一個問題,因此我們要用”closure”(封裝)來解決這個難題:
1 | var add = (function () { |
- ()自發執行函數
(function(){ //do something })()
- 在上述函數內宣告私有變數
var counter = 0;
return function(){} 給指定物件 add
完工!
感想:發明的人真厲害,很聰明的做法…!