在短期变量中使用let和const

时间:2016-06-15 15:57:17

标签: javascript ecmascript-6

假设我有一个短暂的变量,GC会很快清理,例如:

function doSomeThing() {
  var someValue = someCalculation();
  return someValue;
}

现在假设someCalculation()实际上是一个占位符,需要将其返回值设置为变量,或者可能会出现类似的反应:

render() {
  var someComponent = someValues.map(someComponentFactory());
  return (
    <div>    
      <someComponent />
    </div>
  )
}

在这两种情况下,someComponentsomeValue都是短暂的变量,一旦函数返回就会被清除。

使用letconst时的正确方法是什么?

const是有道理的,因为价值不会改变,但let是有道理的,因为你并没有真正设定'常数'值,它会立即被抛弃。

我试图找到javascript引擎的工作方式或某些性能原因你使用其中一个但我找不到任何东西。

所以问题是,在声明一个立即抛弃的变量时,你应该使用let还是const

2 个答案:

答案 0 :(得分:4)

使用const将不允许您提供帮助&#34;垃圾收集。有时开发人员遵循的模式是取消设置变量以表示变量已准备好进行垃圾回收。

例如:

function doSomeThing() {
    let someValue = someCalculation();
    // pass off to another function
    anotherFunction(someValue);
    someValue = null;
}

如果您使用const,则无法将someValue重新分配给null。但是,当没有更多的活动代码引用它时,无论如何它都将被垃圾收集,这可以归结为您最初编写的内容。所以取消确实是唯一的区别。

以下是You Don't Know JS的主题摘录:

  

警告:将对象或数组指定为常量意味着在该常量的词法范围消失之前,将无法对值进行垃圾回收,因为对该值的引用永远不会被取消。这可能是可取的,但如果不是你的意图,请小心!

答案 1 :(得分:1)

我会使用const。对我来说,let用于表示您正在创建一个将要更改的变量。我从不使用它,除非我有充分的理由创建这样的变量。

对于其他所有内容,请使用const