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)的变量。

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容