定時(shí)器函數(shù)為什么不加括號(hào) go為什么不加括號(hào)
function go(){
? ?if(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft){
? ? ? ?list.style.left = parseInt(list.style.left) +speed + 'px';
? ? ? ?setTimeout(go,interval);
? ?}else{
? ? ? ?list.style.left = parseInt(list.style.left) + offset + 'px';
? ? ? ?if(parseInt(list.style.left) > -600){
? ? ? ? ? ?list.style.left = -3000 + 'px';
? ? ? ?}
? ? ? ?if(parseInt(list.style.left) < -3000){
? ? ? ? ? ?list.style.left = -600 + 'px';
? ? ? ?}
? ?}
}
2016-11-10
?setTimeout(go(),interval);這里的go()表示函數(shù)的直接調(diào)用,也就是在setTimeout這個(gè)函數(shù)沒(méi)有執(zhí)行的時(shí)候,go()就已經(jīng)執(zhí)行了;這樣的話當(dāng)?shù)谝淮螆?zhí)行g(shù)o()這個(gè)函數(shù),并到?setTimeout(go(),interval)這行代碼塊時(shí),go()在setTimeout還沒(méi)執(zhí)行時(shí),它就執(zhí)行了,這時(shí)go()再次被調(diào)用,而setTimeout沒(méi)有執(zhí)行;然后又到了?setTimeout(go(),interval)這行代碼塊,這時(shí)go()再次被調(diào)用,而setTimeout還是沒(méi)有執(zhí)行,以后一直這樣,直到滿足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)這個(gè)條件時(shí),?list.style.left = parseInt(list.style.left) + offset + 'px';也就是圖片到達(dá)目的地。所以當(dāng)你?寫(xiě)成setTimeout(go(),interval)時(shí),你會(huì)發(fā)現(xiàn)圖片直接跳轉(zhuǎn),而沒(méi)有緩慢的動(dòng)畫(huà)過(guò)程,因?yàn)閟etTimeout沒(méi)有執(zhí)行過(guò),那就不會(huì)有每隔一個(gè)interval,位移發(fā)生一點(diǎn)變化直到到達(dá)目的地這回事了,而是直接到達(dá)目的地。
2016-11-10
重回答:
?setTimeout(go(),interval);這里的go()表示函數(shù)的直接調(diào)用,也就是在setTimeout這個(gè)函數(shù)沒(méi)有執(zhí)行的時(shí)候,go()就已經(jīng)執(zhí)行了;這樣的話當(dāng)?shù)谝淮螆?zhí)行g(shù)o()這個(gè)函數(shù),并到?setTimeout(go(),interval)這行代碼塊時(shí),go()在setTimeout還沒(méi)執(zhí)行時(shí),它就執(zhí)行了,這時(shí)go()再次被調(diào)用,這時(shí)圖片位移發(fā)生變化,由于
這個(gè)函數(shù)沒(méi)有返回值或者返回值不是可執(zhí)行的函數(shù)或者其他的代碼,所以只是圖片位移發(fā)生變化,setTimeout沒(méi)有執(zhí)行任何函數(shù)(也就是說(shuō)如果這個(gè)go函數(shù)返回一個(gè)函數(shù)的話,那么setTimeout就會(huì)執(zhí)行返回那個(gè)函數(shù));
然后又到了?setTimeout(go(),interval)這行代碼塊,這時(shí)go()再次被調(diào)用,接下來(lái)情況如上次一樣;以后一直這樣,直到滿足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)這個(gè)條件時(shí),?list.style.left = parseInt(list.style.left) + offset + 'px';也就是圖片到達(dá)目的地。所以當(dāng)你?寫(xiě)成setTimeout(go(),interval)時(shí),你會(huì)發(fā)現(xiàn)圖片直接跳轉(zhuǎn),而沒(méi)有緩慢的動(dòng)畫(huà)過(guò)程,因?yàn)閟etTimeout沒(méi)有執(zhí)行g(shù)o這個(gè)函數(shù)過(guò),那就不會(huì)有每隔一個(gè)interval,位移發(fā)生一點(diǎn)變化直到到達(dá)目的地這回事了,而是直接到達(dá)目的地。
2016-07-11
這樣寫(xiě)setTimeout(go,interval)和這樣寫(xiě)setTimeout("go()","interval()")是一樣的。——個(gè)人見(jiàn)解,僅供參考