假设我有以下代码
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
使用的是const
vslet
。
Node如何在内存中处理这一点?
我原以为这没什么区别,因为常量
只会被重新声明,以前迭代的版本只会被gc
释放到内存中。 但事实又何尝不是这样呢? 我正在尝试调试一个内存泄漏,我想知道简单地将const
更改为let
是否可以解决这个问题。
谢啦!
块作用域中的const
总是新的,因此实际上没有区别,只是const
保护for循环中的其余代码,因此即使是意外情况下也不能重新分配foo
。
块作用域是for-of
,for-in
,只是{。。。}
,闭包作用域等,这些都是相同的,常量
每次作用域执行都有效,外部不可达,下一个循环迭代也不可达。
for (const value of items) { ... }
for (const key in object) { ... }
{ const thing = 123; }
等等等等。
记忆方面完全没有区别。 let
和const
都是块范围的声明,因此为循环的每次迭代创建一个单独的变量,只要有任何东西引用它,就保留它。