2014-10-29 58 views
0

我是一個JavaScript新手,並且遇到了一些基本問題。我沒有得到在變量中陳述方法或函數的概念

function expand(element){ 
var target = document.getElementById(element); 
var h = target.offsetHeight; 
var sh = target.scrollHeight; 
var loopTimer = setTimeout('expand(\''+element+'\')',8); 
if(h < sh){ 
    h += 5; 
} else { 
    clearTimeout(loopTimer); 
} 
target.style.height = h+"px"; 
} 

在上面的代碼中,聲明瞭loopTimer變量(setTimeout)。但是,我感到困惑的是,它只是「陳述」,而不是「實際叫」。爲了清楚我的問題,我 預期,而只是

setTimeout('expand(\''+element+'\')',8); 

因爲如果是在變量聲明,在我看來,這種方法或功能只是保存在loopTimer,並從來沒有使用過...但代碼似乎工作,即使loopTimer還沒有被'叫'..

+0

在學習https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout – charlietfl 2014-10-29 01:49:04

回答

2

setTimeout函數返回一個超時ID,可用於稍後取消超時。此代碼調用setTimeout並將其結果(新超時的ID)保存在變量中,以便稍後將其傳遞到clearTimeout

要清楚:你沒有在變量中保存setTimeout函數;你正在保存的結果稱爲。就像target通過調用document.getElementById函數保存DOM元素,而不是函數本身。

+0

時,請隨時保持MDN Docs的鏈接感謝您正確理解我的問題!所以代碼var loopTimer = setTimeout('expand(\''+ element +'\')',8);都調用setTimeout,並同時保存結果?所以你不必使用setTimeout(blahblah ..);另外? – 2014-10-29 01:47:55

+0

沒錯。就像'var n = 1 + 2'一樣,它們都會計算總和並將其保存在一個變量中。評估等號右側的表達式(對於函數,這意味着調用它以獲取其返回值),並將該評估的結果存儲到左側的變量中。 – Wyzard 2014-10-30 02:59:23