Javascript 将参数传递到setTimeout

Javascript 将参数传递到setTimeout,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,将参数从函数传递到setTimeout调用的处理方法是什么?为什么path在这里返回未定义的?我该怎么做呢 $('.curatorSpace').bind('click', function() { var path = $(this).attr('data-path'); setTimeout(function(path) { if($('#curatorRibbon').hasClass('ui-draggable-dragging')){return fal

将参数从函数传递到
setTimeout
调用的处理方法是什么?为什么
path
在这里返回
未定义的
?我该怎么做呢

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

你不需要/必须在那里传递任何东西
path
是一个自由变量,由传递到
setTimeout
的匿名函数关闭。因此,您可以直接访问它

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

实际上,通过将
path
声明为匿名函数的形式参数,您已经通过作用域链覆盖了变量查找过程。去掉它。

进一步澄清一下-
setTimeout
调用您提供的函数时,setTimeout不会向函数传递参数。@StephenP这通常是正确的。但是,在IE以外的浏览器中,可以在延迟(此处为100)之后添加额外的参数,延迟将传递给函数。如果您想对多个超时使用同一个函数,这可能很方便,但它在这里的价值要小得多。有关详细信息,请访问。感谢您的澄清。@Jeff-是的,感谢您进一步澄清,总有一天IE可能会赶上(我还没有检查IE10)