常量vs让调用require时

由于io.js现在支持ES6,你终于可以使用constlet关键字了。 显然, let成为var的inheritance者,只是有一些超级大国。

但是const呢? 当然,我知道“常量”意味着什么,但是我想知道什么时候使用它(关于最佳实践)。

例如,如果我创build一个需要另一个模块的模块,我可以写:

 'use strict'; const util = require('util'); const foo = function () { // Do something with util }; module.exports = foo; 

基本上我已经用const代替var每一个var 。 一般来说,我认为这是可以的,但是如果遵循这个模式,它使我更多地使用const不是let ,因为大多数variables不是字面意义上的“variables”。

这是不错的风格? 我应该去let ? 什么时候应该selectconstlet

当你不需要你的程序时, const可以正常使用

  1. 给variables分配任何东西

     "use strict"; const a = 1; a = 2; 

    会产生TypeError: Assignment to constant variable.

  2. 在不显式初始化的情况下使用variables。

     "use strict"; const a; 

    会产生SyntaxError: Unexpected token ;

简而言之,我会说,

  • 每当你想要一些variables不被修改时使用const

  • 如果你想要与const完全相反的话使用let

  • 使用var ,如果你想与ES5实现兼容,或者你想要模块/function级别的范围。

只有在需要块级别​​范围时才使用let ,否则使用letvar不会有任何区别。

我有同样的感觉,你正在描述。 我的代码中声明variables的很大一部分往往是不变的,甚至对象和数组。 你可以声明常量对象和数组,并且仍然可以修改它们:

 const arr = []; arr.push(1); arr; // [ 1 ] const obj = {}; obj.a = 1; obj; // { a: 1 } 

AFAIK ES6模块在导入时不需要variables声明,我怀疑io.js会在不久的将来转移到ES6模块 。

我认为这是个人select。 当需要模块和模块局部variables(在你的例子中是foo )时,我总是使用const。 对于其余的variables,适当的使用const,但是不要发疯,到处使用const。 我不知道let和const之间的performance,所以我不能分辨是否最好尽可能使用const。

性能testingconst vs let用法对Node.js的require 6.10:

 require('do-you-even-bench')([ { name: 'test 1', fn: function() { const path = require('path'); } }, { name: 'test 2', fn: function() { let path = require('path'); } } ]); 

testing1 …. 2,547,746.72 op / s
testing2 …. 2,570,044.33 op / s

让V / S CONST

区别

  • let和const之间的巨大差异在于,试图赋予先前定义的常量将在严格模式和非严格模式中都引发错误

相似

  • 与let类似,只要在同一个作用域中使用已定义variables的标识符进行const声明,就会引发错误。

例如:

 var message = "Hello!"; let age = 25; // Each of these would cause an error given the previous declarations const message = "Goodbye!"; const age = 30; 
  • 常量也是块级声明,类似于let。 这意味着,一旦执行stream出它们被声明的块,常量就被销毁,并且声明不会被悬挂在块的顶部。