常量vs让调用require时
由于io.js现在支持ES6,你终于可以使用const
和let
关键字了。 显然, 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
? 什么时候应该selectconst
来let
?
当你不需要你的程序时, const
可以正常使用
-
给variables分配任何东西
"use strict"; const a = 1; a = 2;
会产生
TypeError: Assignment to constant variable.
。 -
在不显式初始化的情况下使用variables。
"use strict"; const a;
会产生
SyntaxError: Unexpected token ;
简而言之,我会说,
-
每当你想要一些variables不被修改时使用
const
-
如果你想要与
const
完全相反的话使用let
-
使用
var
,如果你想与ES5实现兼容,或者你想要模块/function级别的范围。
只有在需要块级别范围时才使用let
,否则使用let
或var
不会有任何区别。
我有同样的感觉,你正在描述。 我的代码中声明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出它们被声明的块,常量就被销毁,并且声明不会被悬挂在块的顶部。