本文详细介绍在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程序设计工作提供帮助。