更新: 我遇到的问题完全不同,我会完全删除这个问题,但既然有答案,我就不被允许。 / OP
我有一个非常复杂且难以提炼的脚本,但这是我正在做的事情的本质:
var modulesCount = 4;
// setup the modules object
for (var i = 1; i <= modulesCount; i++) {
composeModule(i);
}
我有一些奇怪的行为,似乎每次调用函数composeModule()
都没有,所以我想,我是否必须使用setTimeout
才能将线程拆分成say这样的4个不同的主题?这样说:
// setup the modules object
for (var i = 1; i <= modulesCount; i++) {
setTimeout(function() {
composeModule(i);
}, 1);
}
-------------------更新
试过这个
var c = 1;
for (var i=1;i<=modulesCount;i++) {
console.error('actual count is: '+c+' while variable i is: '+i);
self.composeModule(i,initialCall);
c++;
}
检查我的变量i是否有问题但是在每个控制台输出中都是c。或者我是否完全误解了你们的观点?
答案 0 :(得分:1)
如果你真的想编写那个循环,你需要将变量i
放入一个闭包中:
// setup the modules object
for (var i = 1; i <= modulesCount; i++) {
(function (inner_i) {setTimeout(function() {
composeModule(inner_i);
}})(i), 1);
}
请参阅JavaScript closure inside loops – simple practical example
答案 1 :(得分:0)
要在javascript中拆分线程,有一个名为web worker的新函数。作为经验法则,工作者类似于Java中的线程。
请参阅以下内容以获取更多信息:https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers