闭包指的是词法表示包括不被计算的函数,也就是说函数可以使用函数之外定义的变量
也可以认为就是在函数中定义的函数,可以访问外部函数,而且使用过程中,访问的是记忆的变量,而不是当然调用时上下文的变量,有点像 java 中 class 的对象。
- 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) 的变量。
来源: http://www.jianshu.com/p/5584f24dc946