五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > JS/javascript中setInterval、setTimeout不能傳遞帶參數(shù)函數(shù)的解決方法

JS/javascript中setInterval、setTimeout不能傳遞帶參數(shù)函數(shù)的解決方法

文章來源:365jz.com     點(diǎn)擊數(shù):506    更新時(shí)間:2017-12-23 20:32   參與評論
JavaScript的setInterval()函數(shù)用于設(shè)定每隔指定的時(shí)間就執(zhí)行對應(yīng)的函數(shù)或代碼。

該函數(shù)屬于全局對象window。

語法

setInterval()函數(shù)的語法如下:

setInterval ( code, milliseconds[, args...] )

參數(shù)

code 需要執(zhí)行的函數(shù)或js代碼
milliseconds 執(zhí)行函數(shù)或代碼的間隔時(shí)間,單位為毫秒
args 可選參數(shù)用于給被調(diào)用的函數(shù)傳遞參數(shù),參數(shù)可以有多個(gè)

在JS/javascript中無論是setTimeout還是setInterval,在使用函數(shù)名作為調(diào)用句柄時(shí)都不能帶參數(shù),而在許多場合必須要帶參數(shù),
這就需要想方法解決。
一、采用字符串形式:——(缺陷)參數(shù)不能被周期性改變
setInterval("foo(id)",1000);
二、匿名函數(shù)包裝 (推薦)
 
window.setInterval(function() 
{ 
foo (id); 
}, 1000); 

這樣就可以周期性執(zhí)行foo(id)這個(gè)函數(shù),而且把變量id傳遞進(jìn)去;
三、定義返回?zé)o參函數(shù)的函數(shù)
 
function foo(id) 
{ 
alert(id); 
} 
function _foo(id) 
{ 
return function() 
{ 
foo(id); 
} 
} 
window.setInterval(_foo(id),1000); 

這里定義了一個(gè)函數(shù)_foo,用于接收一個(gè)參數(shù),并返回一個(gè)不帶參數(shù)的函數(shù),在這個(gè)函數(shù)內(nèi)部使用了外部函數(shù)的參數(shù),從而對其調(diào)用,不需要使用參數(shù)。
在 window. setInterval函數(shù)中,使用_foo(id)來返回一個(gè)不帶參數(shù)的函數(shù)句柄,從而實(shí)現(xiàn)了參數(shù)傳遞的功能。
四、修改setInterval
 
function foo(id) 
{ 
alert(id); 
} 
var _sto = setInterval; 
window.setInterval = function(callback,timeout,param) 
{ 
var args = Array.prototype.slice.call(arguments,2); 
var _cb = function() 
{ 
callback.apply(null,args); 
} 
_sto(_cb,timeout); 
} 
window.setInterval(hello,3000,userName); 

以上的所有方法也適合setTimeout。

jQuery中setInterval()方法:

定義和用法:

setInterval() 方法可按照指定的周期(以毫秒計(jì))來調(diào)用函數(shù)或計(jì)算表達(dá)式。

setInterval() 方法會不停地調(diào)用函數(shù),直到 clearInterval() 被調(diào)用或窗口被關(guān)閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數(shù)。

var time=0;

用法1:

function jump(){
  …………  //函數(shù)內(nèi)容
}
time = setInterval("jump",5000); //每個(gè)五秒調(diào)用一次函數(shù)

當(dāng)需要暫停的時(shí)候

  $("").hover(function(){
    clearInterval(time),function(){
    time = setInterval("jump",5000); 
    }  
  })

用法2:

function autoPlay(){
  time = setInterval(function(){
    …………   //函數(shù)內(nèi)容
  },5000);
}
autoPlay();  //調(diào)用函數(shù)

當(dāng)需要暫停時(shí)

   $("").hover(function(){
    clearInterval(time),function(){
    autoPlay();
    }  
  })

總結(jié):

第一種用法思路比較清晰,先設(shè)置一個(gè)函數(shù),在通過setInterval來自行調(diào)用,但是將其在別處調(diào)用比較困難;

第二種方法看起來比較亂,在setInterval內(nèi)部寫下自行調(diào)用的函數(shù),然后在給他套上一個(gè)有名函數(shù),然后通過調(diào)用有名函數(shù)來實(shí)行自動,在別處調(diào)用比較方便。

以上純屬個(gè)人看法,希望大神們多多指點(diǎn)。

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評論 (506人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號