定時器函數為什么不加括號 go為什么不加括號
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()表示函數的直接調用,也就是在setTimeout這個函數沒有執行的時候,go()就已經執行了;這樣的話當第一次執行go()這個函數,并到?setTimeout(go(),interval)這行代碼塊時,go()在setTimeout還沒執行時,它就執行了,這時go()再次被調用,而setTimeout沒有執行;然后又到了?setTimeout(go(),interval)這行代碼塊,這時go()再次被調用,而setTimeout還是沒有執行,以后一直這樣,直到滿足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)這個條件時,?list.style.left = parseInt(list.style.left) + offset + 'px';也就是圖片到達目的地。所以當你?寫成setTimeout(go(),interval)時,你會發現圖片直接跳轉,而沒有緩慢的動畫過程,因為setTimeout沒有執行過,那就不會有每隔一個interval,位移發生一點變化直到到達目的地這回事了,而是直接到達目的地。
2016-11-10
重回答:
?setTimeout(go(),interval);這里的go()表示函數的直接調用,也就是在setTimeout這個函數沒有執行的時候,go()就已經執行了;這樣的話當第一次執行go()這個函數,并到?setTimeout(go(),interval)這行代碼塊時,go()在setTimeout還沒執行時,它就執行了,這時go()再次被調用,這時圖片位移發生變化,由于
這個函數沒有返回值或者返回值不是可執行的函數或者其他的代碼,所以只是圖片位移發生變化,setTimeout沒有執行任何函數(也就是說如果這個go函數返回一個函數的話,那么setTimeout就會執行返回那個函數);
然后又到了?setTimeout(go(),interval)這行代碼塊,這時go()再次被調用,接下來情況如上次一樣;以后一直這樣,直到滿足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)這個條件時,?list.style.left = parseInt(list.style.left) + offset + 'px';也就是圖片到達目的地。所以當你?寫成setTimeout(go(),interval)時,你會發現圖片直接跳轉,而沒有緩慢的動畫過程,因為setTimeout沒有執行go這個函數過,那就不會有每隔一個interval,位移發生一點變化直到到達目的地這回事了,而是直接到達目的地。
2016-07-11
這樣寫setTimeout(go,interval)和這樣寫setTimeout("go()","interval()")是一樣的?!獋€人見解,僅供參考