標籤:style blog http color io os 使用 ar java
範圍、閉包 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
範圍
- 函數內聲明變數,如果沒有用var,那麼聲明的是全域變數。
- 父物件的所以變數對自變數是可見的,反之不成立(鏈式範圍)。
閉包
可以把閉包簡單理解成"定義在一個函數內部的函數"。在本質上,閉包就是將函數內部和函數外部串連起來的一座橋樑。
閉包主要作用:一個是前面提到的可以讀取函數內部的變數,另一個就是讓這些變數的值始終保持在記憶體中。
使用閉包的注意點:
1)由於閉包會使得函數中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體泄露。解決方案是,在退出函數之前,將不使用的局部變數全部刪除。
2)閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私人屬性(private value),這時一定要小心,不要隨便改變父函數內部變數的值。
閉包的兩道經典題目:
1 var name = "The Window"; 2 var object = { 3 name : "My Object", 4 getNameFunc : function(){ 5 return function(){ 6 return this.name; 7 }; 8 } 9 };10 alert(object.getNameFunc()());
解釋:
1 var name = "The Window"; 2 var object = { 3 name : "My Object", 4 getNameFunc : function(){ 5 var that = this; 6 return function(){ 7 return that.name; 8 }; 9 }10 };11 alert(object.getNameFunc()());
解釋:
JS基礎整理