以下是我编写的代码的简化版本:
var cb_gen, item, list, label, token;
cb_gen = function (token_string) {
return function (data) {
var msg = "logout of [" + token_string + "] ";
msg += (typeof(data.error) == "undefined") ? "succeeded" : "failed";
console.log(msg);
};
};
for (item in list) {
label = "API_" + item;
token = make_token(item);
app_resources.event.once(label, cb_gen(token));
}
这具有为循环的每次迭代生成回调函数的副作用。我宁愿做的事情如下:
var cb_gen, item, list, label, token;
callback = function (data, token_string) {
var msg = "logout of [" + token_string + "] ";
msg += (typeof(data.error) == "undefined") ? "succeeded" : "failed";
console.log(msg);
};
for (item in list) {
label = "API_" + item;
token = make_token(item);
app_resources.event.once(label, callback);
app_resources.event.add_bound_data(label, token);
}
当然我不知道" add_bound_data"这样的方法。我上面列出的第一个代码将起作用,因此我并不急需像第二个代码那样的解决方案。但是,如果我的循环变大,那么第二个例子就会非常好。我很欣赏知情人士能够分享的任何见解。