3

関数からsetTimeout呼び出しにパラメーターを渡すこととは何ですか?なぜpathここに戻ってくるのundefinedですか?そして、私は代わりに何をすべきですか?

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

1 に答える 1

7

そこには何も渡す必要はありません。path自由変数であり、に渡す無名関数によって閉じられますsetTimeout。したがって、あなたはそれにアクセスすることができます。

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

実際、その無名関数の仮パラメーターとして宣言するpathことにより、スコープチェーンを介してその変数ルックアッププロセスを上書きしました。ただそれを取り除いてください。

于 2012-09-18T00:16:38.873 に答える