【发布时间】:2014-03-21 19:06:38
【问题描述】:
有没有办法在不创建匿名函数 10 次的情况下执行以下操作? 假设 setTimeout 只需要 2 个参数,回调和间隔。据我所知,您不应该在循环中创建函数,因为它很慢。但是,如果异步函数不允许您向其传递您希望回调知道的参数,是否可以避免这样做?注意:我知道在 Chrome 中 setTimeout 需要更多参数,所以这不是一个理想的例子。
function doSomethingAsync(i){
setTimeout(function() { //This anonymous function is created 10 times
console.log(i);
}, 1000);
}
for (var i = 0; i < 10; i++) {
doSomethingAsync(i);
}
【问题讨论】:
-
看看this answer,因为它可能会为您提供见解。您可以将参数转换为函数对象的属性。
-
@mathielo 这绝对很有趣,但我仍然不清楚如何应用这个想法(特别是因为对该答案的评论表明,如果你这样做,你将失去创建函数的好处路线)。
-
好吧@AlexMA,如果您不打算在 IE 上运行您的代码,您可以试试这个other approach。这不是最好的解决方案,因为它不是完全跨浏览器,但在某些情况下它可能会有所帮助。
-
@mathielo 我并不真正关心 setTimeout,它只是“限制性”异步函数的一个示例。