提问者:小点点

在循环中使用常量


假设我有以下代码

for (let i=0; i<1000; i++) {
    //Get row from MongoDB
    **const** foo = Collection.find({index:i});
}

vs

for (let i=0; i<1000; i++) {
    //Get row from MongoDB
    **let** foo = Collection.find({index:i});
}

唯一的区别是foo使用的是constvslet

Node如何在内存中处理这一点?

我原以为这没什么区别,因为常量只会被重新声明,以前迭代的版本只会被gc释放到内存中。 但事实又何尝不是这样呢? 我正在尝试调试一个内存泄漏,我想知道简单地将const更改为let是否可以解决这个问题。

谢啦!


共2个答案

匿名用户

块作用域中的const总是新的,因此实际上没有区别,只是const保护for循环中的其余代码,因此即使是意外情况下也不能重新分配foo

块作用域是for-offor-in,只是{。。。},闭包作用域等,这些都是相同的,常量每次作用域执行都有效,外部不可达,下一个循环迭代也不可达。

for (const value of items) { ... }
for (const key in object) { ... }
{ const thing = 123; }

等等等等。

匿名用户

记忆方面完全没有区别。 letconst都是块范围的声明,因此为循环的每次迭代创建一个单独的变量,只要有任何东西引用它,就保留它。