Java閉包如何工作
閉包很像一個物件。只要呼叫一個函式,它就會被例項化。
在JavaScript中閉包的作用域是詞法的,這意味著包含在閉包所屬函式中的所有內容都可以訪問其中的任何變數。
在閉包中包含一個變數
- 賦值為var foo=1;或
- 寫var foo;
如果一個內部函式(包含在另一個函式中的函式)訪問這樣一個變數,而不使用var在它自己的作用域中定義它,那麼它會修改外部閉包中變數的內容。
閉包的執行時間比生成它的函式的執行時間長。如果其他函式超出了定義它們的閉包/作用域(例如作為返回值),這些函式將繼續引用那個閉包。
示例:
function example(closure) { // define somevariable to live in the closure of example var somevariable = 'unchanged'; return { change_to: function(value) { somevariable = value; }, log: function(value) { console.log('somevariable of closure %s is: %s', closure, somevariable); } } } closure_one = example('one'); closure_two = example('two'); closure_one.log(); closure_two.log(); closure_one.change_to('some new value'); closure_one.log(); closure_two.log();
輸出:
somevariable of closure one is: unchanged somevariable of closure two is: unchanged somevariable of closure one is: some new value somevariable of closure two is: unchanged轉載請註明出處
:
http://zgljl2012.com/how-do-javascript-closures-work/