還記得之前面試時,幾乎快要每家的 javascript 都問到了 closure 使用的地方與觀念。 簡單來說,利用 closure 方法,我們可以做出類似私有變數(private)或是延續變數存活域。 看以上這句,一定一點也不懂XD 由例子來看吧! 假設我們現在想做一個 counter ,每呼叫一次 add() ,就把 count+1 因此可能會寫出如下的程式碼 這樣的寫法,當我們與其他程式碼放在一起時,可能會有其他開發人員誤改到 count 這個變數。 但我們也不可能寫成 因此,我們可以利用 closure 嘗試做出類似 C++ 或 java class 的私有域(private)。 這以上可以看到,我們其實間接的延長了 init 的存活域,使他保留在函式私有域中。 以上這段程式碼,可能有人問為什麼要多一個 init 函式,其實這邊可以使用 IIFE(Immediately Invoked Function Expression)簡化。 我們其實可以使用 IIFE 寫成下面這樣 參考資料: http://www.w3schools.com/js/js_function_closures.asp