看不懂,具体请进来看

intergameover 2012-09-05 08:37:55

Ext.onReady(function() {
Ext.MessageBox.show({
title: 'Hold on',
msg: 'we are doing something',
progressText: 'initializing...',
width: 300,
progress: true,
closeable: false
});

var updateFn = function(num) {
return function() { //这里如果不是return,效果就出不来
if (num === 6) {
Ext.MessageBox.updateProgress(100, 'All items saved');
Ext.MessageBox.hide.defer(1500, Ext.MessageBox);
} else {
var i = num / 6;
var pct = Math.round(100 * i);
Ext.MessageBox.updateProgress(i, pct + ' % completed');
}
}; //return function的结束
};

for (var i = 1; i < 7; i++) { //for循环
setTimeout(updateFn(i), i * 500);
}
});


这段代码是 for循环部分,循环调用内部的setTimeout, 进而调用 updateFn函数,在updateFn的定义中,如果去掉注释部分的return function,只写里面的内容,这个setTimeout只执行一次,程序就停止了。不会按照预想的循环6次。


我说的不太明白,但是估计知道原因的人应该能看懂。

求助!!!!!!!!!!!
...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
闭包的问题,通过return形成闭包,引用到当时循环到的i的的值

不加return也是执行了6次updateFn,只是速度快到你看不到过程,而不是同setTimeout那样有个延时执行的过程
intergameover 2012-09-05
  • 打赏
  • 举报
回复
其实这个问题跟Ext没多少关系
mingfish2 2012-09-05
  • 打赏
  • 举报
回复
不会用ext,路过看看

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧