//閉包的概念就是函式巢狀函式 內部函式可以呼叫外部函式的引數和變數 並且變數貯存在記憶體中 不會被垃圾**機制銷毀//可以手動銷毀
//下面介紹閉包的介紹和簡單使用
//簡單寫法
function outer()
return inner;
}var num=outer();
alert(num());//1
alert(num());//2
alert(num());//3
num=null;//手動銷毀
//稍微複雜的寫法
var outer=(function()
})();
alert(outer());//1閉包的好處:alert(outer());//2
alert(outer());//3
//為什麼會產生閉包這種情況呢
//首先num被建立在外部函式內部 而且有內部函式對它的引用 所以當函式自執行以後
//num不會被銷毀 還是會在記憶體中
//以上說法不能很好理解閉包這個東西
//下面這些話才可以更好的理解
//就是return 返回的不僅僅是函式 還把函式的所能訪問的作用域鏈(從內到外一直到window)打包返回了
//所以你繼續呼叫還可以訪問的到
//總結一句話:函式的作用域取決於被定義時,而不是呼叫時
/
1.希望乙個變數長期駐紮在記憶體當中
2.避免全域性變數的汙染
3.私有成員的存在
//用法
1.模組化**
2.在迴圈中直接找到對應元素的索引
1. var test=(function()
function start()
return ;
})();
test.init();
test.start();
/*這樣的好處不言而喻
首先除了test以外的任何物件都訪問不到 init 和start 方法
體現了高內聚的特點
維護也好
還可以改成惰性的
*/2.
var getul=document.getelementbyid("test");
var allli=getui.children;
var len=allli.length;
for(var i=0;i
allli[i].onclick=function()
}//點選所有的都會是3
因為for迴圈完畢以後 allli的點選事件還沒有執行 當執行的時候 i已經變成3了
所以當你觸發事件的時候 只會輸出3
解決方法 :閉包
for(var i=0;i(function(n)
})(i);
}//當每次for迴圈的時候 都會自執行匿名函式 並且把當前索引值傳進去
當你觸發事件的時候 會訪問到你之前傳進來的引數n 也就是當時for迴圈的索引值
//下面這種寫法也可以
for(var i=0;iallli[n].onclick=(function(n)
})(i);
}//同理 目的就是當每次迴圈的時候 把 i 儲存在事件函式所能訪問的最近的作用域中
就是乙個當時執行i的副本 儲存在作用域中 來用
對閉包的簡單理解
閉包是乙個特別抽象的概念,所以本文不會對概念進行解釋。直接寫例子 需要對賦值 程式的執行 返回值有一定的理解 當然本文只是個人對閉包的淺顯的理解,希望能夠對你有所幫助。function fun return funsub var fn fun 執行fun函式,並將funsub函式的位址賦值個fn。f...
python的閉包的簡單理解
閉包 在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包 形成閉包的三個條件,缺一不可 def line a k,b def line x return k x b return line line1 line a 1,5 print line1 1 line...
閉包的應用與理解
普通函式能完成大功能編寫,匿名函式能完成小功能 編寫,而且當作實參非常方便 而閉包比函式方便,擁有函式 的功能 類似於匿名函式 還能有 所需要使用資料 而面向對像,例項物件賦值給引數,裡面的引數和方法都有,但應用中往往只要一部分,而不是全部,故閉包的優點就能體現出來,就是比物件導向更輕量,不會有多餘...