【发布时间】:2017-01-11 09:15:55
【问题描述】:
我有这个代码 sn-p;它基本上连接到 mongo 数据库并遍历文档。在每次迭代中,它都会搜索对象的消息数组。它创建消息变量,然后循环遍历它。 回调函数中声明的变量(var msg)是保留在内存中还是在回调函数执行结束时被销毁?如果var msg实际上被声明为let msg,会有什么不同吗?有没有办法从内存中丢弃整个范围?
MongoClient.connect(mongoUrl, (err, db) => {
assert.equal(null,err);
var collection_data = db.collection('threadContents').find();
collection_data.on('data', (doc) => {
var msg = doc.messages;
for (var variable in msg) {
console.log(msg);
}//forin(msg)
});//collection_data.on
});//mongo.connect
【问题讨论】:
-
is it destroyed upon end of callback function execution?- 通常是这样,这真的取决于代码 -
@JaromandaX 我提供了示例代码 sn-p。否则,推荐在回调函数执行结束时强制销毁变量的方法是什么?
-
哦,你问的是你的具体代码吗?你关心哪个变量?
-
@JaromandaX 有描述。在 on('data') 回调函数中,声明了 var msg。是毁了还是还留在记忆里?
-
@Kunok 没有闭包,所以它会在某个时候被 GC 处理,但是一旦你完成循环,最好将它与
doc.messages(msg = null; doc.messages = null;) 一起取消。
标签: javascript node.js memory theory ram