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位于each函数的闭包中,因此对于您拥有的每一行,它doOperation都会有所不同。

于 2012-12-14T16:04:19.333 回答