2012-10-04 38 views
0

後來我問了一個javascript函數,它允許我以設定的時間間隔在瀏覽器窗口中調整內容大小。就像,不是每個像素大小的變化。我被賦予了這個功能:這個窗口如何調整函數的功能?

function throttle (func, wait) { 
    var throttling = false; 
    return function(){ 
        if (!throttling){ 
            func.apply(this, arguments); 
            throttling = true; 
            setTimeout(function(){ 
                throttling = false; 
            }, wait);             
        } 
    }; 
} 


window.onresize = throttle(function() { 
    resize_columns(); 
}, 20); 

該人說,那時他/他沒有真正的時間來解釋關閉。我仍然不明白它是如何工作的。有人可以向我解釋嗎?

謝謝。

+0

的http:// www.javascriptkit.com/javatutors/closures.shtml –

+0

閉包基本上做的是讓它的匿名函數(用'function(){...}聲明'看到局部變量「圍繞」它。實際上,對於以語言開頭的人來說,他們更直觀,而不是那些知道爲什麼關閉難以實現的人。 – millimoose

+0

@millimoose謝謝。你能更具體一些關於「周圍」的嗎? – 1252748

回答

0

返回的匿名函數形成'throttling'變量的閉包。所以,即使你的堆棧展開,並且函數throttle()超出了範圍。匿名函數仍然可以訪問'throttling'變量。

閉包是真棒。我使用他們曾經一天,他們仍然像魔術對我來說..(這是少神奇,一旦你瞭解它們是如何在堆上實現,但我離題了:)

+0

仍然不太確定我完全明白,但謝謝!你能否告訴我另外一個例子,說明你如何每天使用閉包來執行魔法?再次感謝! – 1252748

+0

好的..你不覺得你回來的匿名函數一旦超出範圍就可以訪問'throttling'變量嗎?油門()功能不復存在..但它聲明的變量仍然可以訪問.. –

+0

哦,不。我認爲這很酷。我只是想另一個例子說明你如何每天使用它。我一點都不諷刺。 – 1252748