官方定义
闭包指的是词法表示包括不被计算的函数,也就是说函数可以使用函数之外定义的变量
也可以认为就是在函数中定义的函数,可以访问外部函数,而且使用过程中,访问的是记忆的变量,而不是当然调用时上下文的变量,有点像 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)的变量。
闭包总结起来有两个好处:
-
变量作用范围在闭包内部,避免变量冲突,有利于面相对象设计。
-
记忆变量值,回调函数能找到定义时的那个变量。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于