JavaScript中setTimeout调用带参函数的两种实现方案

作者:拾光

时间:2026-10-30

浏览:287

本文详细介绍在JavaScript中使用setTimeout调用带参函数的两种常见方法。第一种通过重写setTimeout利用闭包保存参数,第二种直接传递参数字符串执行。文章提供了具体代码示例及参数说明,帮助开发者解决定时器回调传参难题。

文章目录

引言

本文通过具体实例分析,探讨JavaScript中setTimeout()在调用带参函数时遇到的问题及其解决方案。内容供读者参考与学习。

重写setTimeout实现方案

一种有效的解决思路是重写setTimeout()方法,该方案依赖于闭包机制。具体实现代码如下:


var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay){
 if (typeof fRef == 'function') {
  var argu = Array.prototype.slice.call(arguments, 2);
  var f = function(){
    fRef.apply(null, argu);
  };
  return _st(f, mDelay);
 }
 return _st(fRef, mDelay);
}

经过上述改写后,调用带参函数时可采用如下形式:


setTimeout(fun,10,param);

在上述调用中,fun代表被调用的函数,10表示调用周期,单位为毫秒,param则是传递给fun函数的具体参数。

字符串执行方案

此外,还存在一种更为简便的实现方式:


function moveing(id,target_x,target_y,t){
 var ele = document.getElementById(id);
 //alert("divObject: "+ele)
 var xpos = parseInt(ele.style.left);
 //alert(ele.style.left)
 var ypos = parseInt(ele.style.top);
 if(xpos < target_x){
 xpos++;
 }
 if(ypos < target_y ){
 ypos++;
 }
 ele.style.left = xpos + "px";
 ele.style.top = ypos + "px";
//被递归调用的函数本身,拼成字符串形式,注意第一个参数的引号
 var repeat ="moveing('"+id+"',"+target_x+","+target_y+","+t+")"; 
 var movment = setTimeout(repeat,t);
}

如需了解更多JavaScript相关知识,可参考本站相关专题,包括《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》。

希望本文所述内容能对读者的JavaScript程序设计工作提供帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章