js閉包和Extjs動態創建菜單的回調函數理解

官方定義

閉包指的是詞法表示包括不被計算的函數,也就是說函數可以使用函數之外定義的變量

也可以認為就是在函數中定義的函數,可以訪問外部函數,而且使用過程中,訪問的是記憶的變量,而不是當然調用時上下文的變量,有點像java中class的對象。

extjs中動態創建組件,帶有回調函數:

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變量需要用閉包記憶起來,不然實際回調函數執行的時候用的是當前上下文(本例是循環結束時的值即i+1)的變量。

閉包總結起來有兩個好處:

  • 變量作用范圍在閉包內部,避免變量沖突,有利于面相對象設計。

  • 記憶變量值,回調函數能找到定義時的那個變量。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容