1

次のコードが競合状態を引き起こす可能性があるかどうか疑問に思っていました:

 rows.each(function () {

        var current = this;
        var doOperation = function () {
            current.someMethod();      
            // do some operation using current
        };

        setTimeout(doOperation, 1);
    });

settimeout の遅延中に、ブラウザーがループの次の繰り返しの実行を開始し、「現在」を変更して、最初に割り当てられた値を使用して doOperation が実行されないようにすることは可能ですか?

4

2 に答える 2

4

doOperation各反復は新しいローカル変数を閉じcurrent、前のものに干渉しないため、そこに危険はありません。

于 2012-12-14T16:02:57.260 に答える
3

ここではすべてが順調に進んでいるようです。関数setTimeoutのクロージャーにあるため、行ごとに異なります。eachdoOperation

于 2012-12-14T16:04:19.333 に答える