gpt4 book ai didi

Javascript 对象生命周期

转载 作者:搜寻专家 更新时间:2023-11-01 05:30:22 24 4
gpt4 key购买 nike

我有一个如下所示的 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();
}
}

当我实例化类并调用 init 函数时,循环开始,我每 1 秒在控制台中获取一次文本:

var ins = new MYCLASS();
ins.init();

为什么当我将实例设置为空时,线程不会停止?或者任何时候我创建一个新实例并将其分配给以前的实例名称,它都会增加调用。

在我的生产代码中,我没有无限循环,但我确实有一些业务逻辑。创建新实例时是否需要担心性能?

最佳答案

当您调用 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);
}
}

关于Javascript 对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com