atm*_*tmd 2 javascript ecmascript-6
假设我有一个短暂的变量,GC 会很快清理它,例如:
function doSomeThing() {
var someValue = someCalculation();
return someValue;
}
Run Code Online (Sandbox Code Playgroud)
现在假设这someCalculation()实际上是一个占位符,用于需要将其返回值设置为变量的东西,或者可能是反应中的东西,例如:
render() {
var someComponent = someValues.map(someComponentFactory());
return (
<div>
<someComponent />
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下someComponent和someValue都是短期变量,一旦函数返回就会被清除。
let使用和时的正确方法是什么const?
const有意义,因为值不会改变,但是let有意义是因为您没有真正设置“常量”值,它会立即被丢弃。
我试图找到 javascript 引擎的工作方式或某些性能原因,你会使用其中之一,但我找不到任何东西。
所以问题是,当声明一个立即丢弃的变量时,你应该使用letorconst吗?
使用const不会让你“帮助”垃圾收集。有时,开发人员遵循的模式是取消设置变量以表明该变量已准备好进行垃圾收集。
例如:
function doSomeThing() {
let someValue = someCalculation();
// pass off to another function
anotherFunction(someValue);
someValue = null;
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用const,则无法重新分配someValue给null。但是,当没有更多活动代码引用它时,无论如何它都会被垃圾收集,这会回退到您最初编写的内容。所以取消设置确实是唯一的区别。
以下是《你不懂 JS》中关于该主题的一个小片段:
警告:将对象或数组分配为常量意味着该值将无法被垃圾收集,直到该常量的词法范围消失,因为对该值的引用永远无法取消设置。这可能是可取的,但如果这不是您的意图,请小心!