美文网首页程序员
js闭包和Extjs动态创建菜单的回调函数理解

js闭包和Extjs动态创建菜单的回调函数理解

作者: 九笔人生 | 来源:发表于2018-01-03 13:10 被阅读0次

    官方定义

    闭包指的是词法表示包括不被计算的函数,也就是说函数可以使用函数之外定义的变量

    也可以认为就是在函数中定义的函数,可以访问外部函数,而且使用过程中,访问的是记忆的变量,而不是当然调用时上下文的变量,有点像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)的变量。

    闭包总结起来有两个好处:

    • 变量作用范围在闭包内部,避免变量冲突,有利于面相对象设计。

    • 记忆变量值,回调函数能找到定义时的那个变量。

    相关文章

      网友评论

        本文标题:js闭包和Extjs动态创建菜单的回调函数理解

        本文链接:https://www.haomeiwen.com/subject/uqshnxtx.html