在Kyle Simpson的新书《You Don't Know JS: ES6 and beyond》中,我发现以下摘录:
警告:将对象或数组分配为常量意味着该值在该常量的词法范围消失之前将无法进行垃圾回收,因为对该值的引用永远无法取消设置。这可能是可取的,但如果不是您的意图,请小心!
(摘自:Simpson,Kyle。“You Don't Know JS: ES6&Beyond。”O'Reilly Media,Inc.,2015年6月2日。iBooks。此材料可能受版权保护。)
据我所知,他没有进一步阐述这一点,而且Google搜索10分钟也找不到任何相关信息。如果是这样,那么“引用永远无法取消设置”究竟是什么意思?我已经养成了将不会更改的变量声明为const的习惯,从具体性能/内存方面来说,这是一个坏习惯吗?
警告:将对象或数组分配为常量意味着该值在该常量的词法范围消失之前将无法进行垃圾回收,因为对该值的引用永远无法取消设置。这可能是可取的,但如果不是您的意图,请小心!
(摘自:Simpson,Kyle。“You Don't Know JS: ES6&Beyond。”O'Reilly Media,Inc.,2015年6月2日。iBooks。此材料可能受版权保护。)
据我所知,他没有进一步阐述这一点,而且Google搜索10分钟也找不到任何相关信息。如果是这样,那么“引用永远无法取消设置”究竟是什么意思?我已经养成了将不会更改的变量声明为const的习惯,从具体性能/内存方面来说,这是一个坏习惯吗?
const
变量的。你提供的链接讨论了闭包。这个问题涉及到多种关于闭包和内存回收的情况,包括最后两句话。但是总体来说,如果你想给变量赋值,就不要把它设置为const
。如果你不需要对其进行赋值并且想保护它,那就把它设置为const
。没有比这更复杂的了。 - jfriend00const
本身不会改变垃圾回收。如果您想手动删除变量指向的引用,则不要使该变量为const
。 - jfriend00const
还是var
声明,它所指向的内容都将在完全相同的时刻进行垃圾回收。如果您想在将来的任何时候出于任何原因修改该变量的内容,则不要使用const
。 - jfriend00const
或var
有任何不同对待吗?是的,程序员必须在使用const
或var
时采取不同的操作方式,但不是GC。而且,如果您想在将来某个时候将变量设置为null以使某些内容符合GC的条件,则不要使用const
。我的回答的第二段已经说明了这一点。那么,您认为我之前的评论哪部分是错误的?顺便说一句,我不同意你的观点,但我没有给你的答案投反对票。” - jfriend00