如何在回调函数中使用delete运算符(理解问题)



我有一个关于delete运算符的问题。

在将属性设置为null之前删除属性的第一个选项是否危险?

对不起,这真的只是一个理解问题,如果有人能向我解释,我会很高兴。

选项1:

var requestPool = context.get('requestPool');
requestPool.pool[id].to = setTimeout(function() { 
delete requestPool.pool[id];
}, msg.modbusJob.timeout);

选项2:

requestPool.pool[id].to = setTimeout(function() { 
requestPool.pool[id].to = null;
if(requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);

在将属性设置为null之前删除属性的第一个选项是否危险?

在将属性设置为null之前,对其使用delete是安全的,但这也是不必要的。我猜(但我可能错了(你试图确保前一项是垃圾收集的。如果是这样,那么您也不需要delete。任何一种都会使前一项成为垃圾可回收项(假设某个地方没有其他代码段保留对它的引用(。

在设置之前删除属性的第一个选项是否危险属性为null?

我会这样写:

setTimeout(function() { 
if(requestPool && requestPool.pool && requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);

或者使用更现代的语法:

setTimeout(() => { 
if(requestPool?.pool && requestPool.pool[id]) {
delete requestPool.pool[id];
}
}, msg.modbusJob.timeout);

最新更新