setInterval的第一個參數(shù)可以是含js命令的字符串,也可以是函數(shù)對象惠桃。但若是含js命令的字符串時,要千萬注意該字符串是在全局作用域下執(zhí)行的O绞浴9纪酢!下面來看一個例子:
修改后的正確代碼為:
運行結(jié)果如下:
且這種以字符串調(diào)用的方法是可以傳參的9扌ⅰD殴荨!只不過參數(shù)也必須是全局的變量莲兢。如這樣是不會報錯的
但這樣就會報錯:
而當?shù)谝粋€參數(shù)是以函數(shù)對象的形式給出時汹来,其實白癡的我曾經(jīng)寫過這種寫法:
發(fā)現(xiàn)這種僅執(zhí)行一次续膳,找了半天原因,邏輯上并沒有錯誤收班,后來上網(wǎng)查閱資料發(fā)現(xiàn)原來是寫法出現(xiàn)了錯誤坟岔,這樣寫的話是函數(shù)的調(diào)用,而且并無任何返回值什么的摔桦,僅是一次函數(shù)調(diào)用社付,而setInterval要求第一個參數(shù)是函數(shù)或是含js命令的字符串,說白了相當于這個setInterval是無效的邻耕。
而正確的寫法應該是這樣滴:
但其實這種setInterval我覺得第一個參數(shù)用匿名函數(shù)最不容易出錯了(不喜勿噴):
這就是折磨了我兩個晚上才解決的問題(實在是個low B)鸥咖。
這里再提一下看到的另一種可以傳參的方法(原文:https://wayne173.iteye.com/blog/1907530),修改window.setinterval的定義
//*?? 功能: 修改 window.setInterval 赊豌,使之可以傳遞參數(shù)和對象參數(shù)
//*?? 方法: setInterval (回調(diào)函數(shù),時間,參數(shù)1,,參數(shù)n)? 參數(shù)可為對象:如數(shù)組等
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);
//-->
若有不對的地方請加以指正扛或。若轉(zhuǎn)載請聲明出處。謝謝