帮解释一下这段代码,谢谢

zuoyangguang 2009-01-21 10:01:57
var Runner = function(){
var f = function(v, pbar, btn, count, cb){
return function(){
if(v > count){
btn.dom.disabled = false;
cb();
}else{
if(pbar.id=='pbar4'){
//give this one a different count style for fun
var i = v/count;
pbar.updateProgress(i, Math.round(100*i)+'% completed...');
}else{
pbar.updateProgress(v/count, 'Loading item ' + v + ' of '+count+'...');
}
}
};
};
return {
run : function(pbar, btn, count, cb){
btn.dom.disabled = true;
var ms = 5000/count;
for(var i = 1; i < (count+2); i++){
setTimeout(f(i, pbar, btn, count, cb), i*ms);
}
}
}
}();
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
老黄瓜_ 2009-02-10
  • 打赏
  • 举报
回复
setTimeout(f(i, pbar, btn, count, cb), i*ms);

如果 f不是返回函数的话

setTimeout(f, i*ms); 你就要这样掉用了 仔细看看你的代码先
ace112212 2009-02-10
  • 打赏
  • 举报
回复
这个是不是一个 读取什么东西 然后进度条的代码阿


cb();方法在哪里阿 没看到阿


太长了 不想看呵呵
wxdvc 2009-02-06
  • 打赏
  • 举报
回复
高了
zuoyangguang 2009-02-06
  • 打赏
  • 举报
回复
up
zuoyangguang 2009-01-22
  • 打赏
  • 举报
回复
var f = function(v, pbar, btn, count, cb){
return function(){
if(v > count){
btn.dom.disabled = false;
cb();
}else{
if(pbar.id=='pbar4'){
//give this one a different count style for fun
var i = v/count;
pbar.updateProgress(i, Math.round(100*i)+'% completed...');
}else{
pbar.updateProgress(v/count, 'Loading item ' + v + ' of '+count+'...');
}
}
};
};
为什么不直接
var f = function(v, pbar, btn, count, cb){

if(v > count){
btn.dom.disabled = false;
cb();
}else{
if(pbar.id=='pbar4'){
//give this one a different count style for fun
var i = v/count;
pbar.updateProgress(i, Math.round(100*i)+'% completed...');
}else{
pbar.updateProgress(v/count, 'Loading item ' + v + ' of '+count+'...');
}
}
};
而要返回一个函数,事实证明也确实这样有问题
这是ext例子中的一段代码
/*
* Ext JS Library 2.0.2
* Copyright(c) 2006-2008, Ext JS, LLC.
* licensing@extjs.com
*
* extjs.com/license
*/

Ext.onReady(function(){
//==== Progress bar 1 ====
var pbar1 = new Ext.ProgressBar({
text:'Initializing...'
});
var btn1 = Ext.get('btn1');
btn1.on('click', function(){
Ext.fly('p1text').update('Working');
if (!pbar1.rendered){
pbar1.render('p1');
}else{
pbar1.text = 'Initializing...';
pbar1.show();
}
Runner.run(pbar1, Ext.get('btn1'), 10, function(){
pbar1.reset(true);
Ext.fly('p1text').update('Done.').show();
});
});

//==== Progress bar 2 ====
var pbar2 = new Ext.ProgressBar({
text:'Ready',
id:'pbar2',
cls:'left-align',
renderTo:'p2'
});
var btn2 = Ext.get('btn2');
btn2.on('click', function(){
Runner.run(pbar2, btn2, 12, function(){
pbar2.reset();
pbar2.updateText('Done.');
});
});

//==== Progress bar 3 ====
var pbar3 = new Ext.ProgressBar({
id:'pbar3',
width:300,
renderTo:'p3'
});
pbar3.on('update', function(val){
//You can handle this event at each progress interval if
//needed to perform some other action
Ext.fly('p3text').dom.innerHTML += '.';
});
var btn3 = Ext.get('btn3');
btn3.on('click', function(){
Ext.fly('p3text').update('Working');
btn3.dom.disabled = true;
pbar3.wait({
interval:200,
duration:5000,
increment:15,
fn:function(){
btn3.dom.disabled = false;
Ext.fly('p3text').update('Done');
}
});
});

//==== Progress bar 4 ====
var pbar4 = new Ext.ProgressBar({
text:'Waiting on you...',
id:'pbar4',
textEl:'p4text',
cls:'custom',
renderTo:'p4'
});
var btn4 = Ext.get('btn4');
btn4.on('click', function(){
Runner.run(pbar4, btn4, 19, function(){
pbar4.updateText('All finished!');
});
});
});

//Please do not use the following code as a best practice! :)
var Runner = function(){
var f = function(v, pbar, btn, count, cb){
return function(){
if(v > count){
btn.dom.disabled = false;
cb();
}else{
if(pbar.id=='pbar4'){
//give this one a different count style for fun
var i = v/count;
pbar.updateProgress(i, Math.round(100*i)+'% completed...');
}else{
pbar.updateProgress(v/count, 'Loading item ' + v + ' of '+count+'...');
}
}
};
};
return {
run : function(pbar, btn, count, cb){
btn.dom.disabled = true;
var ms = 5000/count;
for(var i = 1; i < (count+2); i++){
setTimeout(f(i, pbar, btn, count, cb), i*ms);
}
}
}
}();
rjzou2006 2009-01-21
  • 打赏
  • 举报
回复
最后的()是运行此函数 好比直接调用Runner()
2个return没有什么联系
第一个return是该方法中定义的新function f()的返回值 该值是一个function
第二个是Runner方法返回一个名称为run的方法
tantaiyizu 2009-01-21
  • 打赏
  • 举报
回复
()下就调用了 ,呵呵
Even713 2009-01-21
  • 打赏
  • 举报
回复
因为他return出来的是函数,()就是执行return出来的函数
neo_yoho 2009-01-21
  • 打赏
  • 举报
回复
最后的()是运行此函数 好比直接调用Runner()
2个return没有什么联系
第一个return是该方法中定义的新function f()的返回值 该值是一个function
第二个是Runner方法返回一个名称为run的方法
zuoyangguang 2009-01-21
  • 打赏
  • 举报
回复
想知道最后的()是什么意思,两个return又是什么意思

87,910

社区成员

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

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