0
for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[i], function(n) {    
            //question about function(n) here
        }
    })(i)
}

function request(boxContainer, callback) {
    $.getJSON(url, function(data) {
        //dataArray is created here
    }

    boxContainer.innerHTML = '';

    $.each(dataArray, function(idx, v){
        boxContainer.innerHTML += '<div class="output"><h4>..</h4><p>..</p></div>';
    }

    callback(data);
}

request()函数应output为 for 循环中的 10 个产品中的每一个产品生成一个 div 容器。

我的问题是:

调用request()函数完成后,到了回调函数执行的时间,是10个div容器都创建好了还是只box[i]创建了一个for呢?

4

2 回答 2

1

您在循环中使用闭包的尝试是正确的,但您使用了错误的变量名 - 它x不应该是i

for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[x], function(n) {    
            //question about function(n) here
        }
    })(i)
}

顺便说一句,您的选择box应该已经移到循环之外。

于 2013-02-06T16:38:00.983 回答
0

我认为它只是在那个时候创建​​了 box[i] 的那个。对于创建后的回调,您可以使用 jQuery 的 promise 和 defered 系统,请参见此处(多个)。或者您可以在代码中维护一个计数器,以便仅在达到 10 的目标后执行一些代码。

也许像这样 var target = counter = 10, data={}; 对于 (var i=0; 我

    (function(x) {
        request(box[x], function(n) {
            data[x] = n;
            if(--counter == 0) {
                //all are done
            }
        }
    })(i)
}
于 2013-02-06T16:29:56.190 回答