官方定义 闭包指的是词法表示包括不被计算的函数,也就是说函数可以使用函数之外定义的变量 也可以认为就是在函数中定义的函数,可以访问外部函数,而且使用过程中,访问的是记忆的变量,而不是当然调用时上下文的变量,有点像 Java 中 class 的对象。 extjs 中动态创建组件,带有回调函数: var menubar=E ..

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

本贴最后更新于 264 天前,其中的信息可能已经事过境迁

官方定义

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

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

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

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    1648 引用 • 3449 回帖 • 565 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    432 引用 • 1025 回帖 • 864 关注
回帖
请输入回帖内容...