本文實例分析了JS中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()調用帶參函數的時候,就可以用如下的形式:
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程序設計有所幫助。