2012-09-18 115 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