Ahm*_*avi 5 javascript multithreading object
我有一个如下所示的 Javascript 类:
var MYCLASS = function(elem, data, op) {
var options = {};
var loopForEver = function() {
console.log('I cant stop me');
setTimeout(function() {
loopForEver();
}, 1000);
}
this.init = function() {
loopForEver();
}
}
Run Code Online (Sandbox Code Playgroud)
当我实例化类并调用 init 函数时,循环开始,我每 1 秒在控制台中获取一次文本:
var ins = new MYCLASS();
ins.init();
Run Code Online (Sandbox Code Playgroud)
为什么当我将实例设置为空时,线程并没有停止?或者任何时候我创建一个新实例并将其分配给以前的实例名称,它都会增加调用。
在我的生产代码中,我没有无限循环,但我确实有一些业务逻辑。创建新实例时是否需要担心性能?
当您调用 setTimeout 时,它不受调用它的函数的约束。您需要向对象添加一个名为 之类的属性timeOutID。只要该函数仍然需要被 setTimeout 之类的东西使用,它就会保留在范围内。
var MYCLASS = function(elem, data, op) {
var options = {};
var timeOutID = null;
var loopForEver = function() {
console.log('I cant stop me');
timeOutID = setTimeout(function() {
loopForEver();
}, 1000);
}
this.init = function() {
loopForEver();
}
this.stop = function () {
clearTimeout(timeOutID);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |