2012-09-18 114 views
3

將參數從函數傳遞到setTimeout調用的處理是什麼?爲什麼path這裏返回undefined?我該怎麼做呢?將參數傳遞給setTimeout

$('.curatorSpace').bind('click', function() { 
    var path = $(this).attr('data-path'); 
    setTimeout(function(path) { 
     if($('#curatorRibbon').hasClass('ui-draggable-dragging')){return false} 
     runOverlay(path); 
    }, 100); 
}); 

回答

7

你不需要/必須通過任何內容。 path是一個自由變量,並由您傳遞給setTimeout的匿名函數關閉。因此,您可以訪問它。

setTimeout(function() { 
    if($('curatorRibbon').hasClass('ui-draggable-dragging')){return false} 
    runOverlay(path); // path gets resolved in the parent context 
}, 100); 

實際上,通過聲明path爲匿名函數的形參,你已經通過作用域鏈覆蓋該變量查找過程。只是擺脫這一點。

+0

爲了進一步闡明 - 當'setTimeout'調用你提供的函數時,setTimeout不會傳遞參數給函數。 –

+0

@StephenP這通常是正確的。但是,在IE以外的瀏覽器中,可能會在延遲(此處爲100)之後添加其他參數,這些參數將傳遞給函數。如果你想要爲多個超時使用相同的函數,這可能會很方便,但是它在這裏特別具有更少的價值。詳情請參閱https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout。 –

+0

感謝您的澄清。 – codelove