官方定義
閉包指的是詞法表示包括不被計算的函數(shù)没龙,也就是說函數(shù)可以使用函數(shù)之外定義的變量
也可以認為就是在函數(shù)中定義的函數(shù)憎瘸,可以訪問外部函數(shù)虫碉,而且使用過程中寓免,訪問的是記憶的變量苞俘,而不是當然調(diào)用時上下文的變量盹沈,有點像java中class的對象。
extjs中動態(tài)創(chuàng)建組件,帶有回調(diào)函數(shù):
var menubar=Ext.GetComp("menu")
for (var i in jsonobj){
var handle=function(){
var url=jsonobj[i].url
return function{
window.location.href=url
}
}
var button={
text:windows[jsonobj[i].label],
handler:handler(),
iconCls:"icon-btn,
width:110
}
menubar.menu.addItem(button)
}
其中url變量需要用閉包記憶起來吃谣,不然實際回調(diào)函數(shù)執(zhí)行的時候用的是當前上下文(本例是循環(huán)結(jié)束時的值即i+1)的變量乞封。
閉包總結(jié)起來有兩個好處:
變量作用范圍在閉包內(nèi)部,避免變量沖突岗憋,有利于面相對象設計肃晚。
記憶變量值,回調(diào)函數(shù)能找到定義時的那個變量仔戈。