Javascript 调用require时const vs let
作为io.js,现在您终于可以使用Javascript 调用require时const vs let,javascript,node.js,ecmascript-6,io.js,Javascript,Node.js,Ecmascript 6,Io.js,作为io.js,现在您终于可以使用const和let关键字了。显然,let是var的继承者,只是拥有一些超能力 但是常量呢?当然,我知道“常量”是什么意思,但我想知道什么时候使用它(关于最佳实践) 例如,如果我创建了一个需要另一个模块的模块,我可以写: 'use strict'; const util = require('util'); const foo = function () { // Do something with util }; module.exports = fo
const
和let
关键字了。显然,let
是var
的继承者,只是拥有一些超能力
但是常量呢?当然,我知道“常量”是什么意思,但我想知道什么时候使用它(关于最佳实践)
例如,如果我创建了一个需要另一个模块的模块,我可以写:
'use strict';
const util = require('util');
const foo = function () {
// Do something with util
};
module.exports = foo;
基本上,我已经用const
替换了所有出现的var
。一般来说,我认为这是可以的,但是如果我遵循这个模式,它会让我更多地使用const
而不是let
,因为大多数变量不是字面意义上的“变量”
这个款式好吗?我是否应该选择“让”?什么时候我应该选择
const
而不是let
?const
可以在您不需要程序时正常使用
"use strict";
const a = 1;
a = 2;
将产生类型错误:分配给常量变量。
"use strict";
const a;
将生成SyntaxError:意外标记代码>
- 只要不想修改某些变量,就使用
const
- 如果您希望与常量正好相反,请使用
let
- 如果您希望与ES5实现兼容,或者想要模块/功能级范围,请使用
var
只有在需要块级范围时才使用
let
,否则使用let
或var
不会有任何区别。我有与您描述的相同的感觉。在我的代码中,大部分声明的变量都是常量,甚至是对象和数组。您可以声明常量对象和数组,但仍可以修改它们:
const arr = [];
arr.push(1);
arr;
// [ 1 ]
const obj = {};
obj.a = 1;
obj;
// { a: 1 }
AFAIK在导入时不需要变量声明,我怀疑这一点
我认为这是个人的选择。当需要模块和模块局部变量时,我总是使用const(
foo
)。对于其余的变量,适当地使用const,但千万不要疯狂地到处使用const。我不知道let和const之间的性能,因此我无法判断是否最好尽可能使用const。性能测试const
vslet
使用require
for Node.js 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');
}
}
]);
测试1。。。。2547746.72 op/s测试2。。。。2570044.33 op/s背景:
const util = require('util')
let是var关键字的继承者,具有强制限制。这些限制减少了犯错误的机会,增加了安全性。基本上,它有块作用域,即它只对声明它的块可用。换句话说,变量不能在已声明的块之外访问
const可访问性也在块范围内。但一旦初始化,就不能重新初始化。在数组、对象的情况下,这可能很棘手
数组初始化意味着什么
let arr = [1, 2, 3, 4, 5];
arr
包含数组第一个元素的引用(地址或指针)。这就是为什么这一点永远不成立的原因
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [1, 2, 3, 4, 5];
if (arr1 == arr2)
console.log("Both arr1 and arr2 are same");
这不得在控制台中打印arr1和arr2相同的。尽管他们在各个方面看起来都一样。但是如果我们看到arr1
和arr2
指向内存中的不同位置。同样的概念也适用于对象。例如:
let obj1 = {name:'John', age:'22'}
let obj2 = {name:'John', age:'22'}
if (obj1 == obj2)
console.log("Both obj1 and obj2 are same");
obj1
和obj2
指向不同的内存位置。因此console.log语句永远不会运行
如果我们对数组或对象使用const
声明,则根据定义,它无法重新初始化。但实际上,分配给数组或对象的标识符是内存指针(地址)。可以相应地修改(变异)数组或对象
问题的答案:
const util = require('util')
这种类型的声明确保不会第二次声明util
。这使得代码不易出错,即减少出错的机会<函数中的code>const
声明使其不易出错。重新声明时,它会抛出一个错误
例如,假设您声明了一个函数factorial
,该函数负责查找数字的阶乘。让我们考虑这个例子:
const factorial = (n) => {
let fact = 1;
for(let i=1;i<=n;i++)
fact *= i;
return fact;
}
const factorial = 5;
console.log(factorial(10));
const阶乘=(n)=>{
让事实=1;
对于(假设i=1;iI期望const
都是大写的,比如const KEY_A=65
。我认为,如果值永远不会更改,或者更重要的是防止更改,则应该使用const
。let
应该在以后覆盖/更改值时使用,并且当您需要一个块范围的变量而不是函数范围的变量时,应该使用th。如果您需要一个函数范围的变量,var
仍然可用。我可能错了,我还没有读过那么多ES6/2015。将util
声明为const
仅仅意味着该变量不能设置为其他变量值。但是,如果它不是原语,您仍然可以添加、修改和删除其中的属性。此外,Const的性能似乎很差,尽管实际上,let
和Const
确实可以提升,但它比这要复杂一点:我认为前半部分不正确lly确实会抛出一个错误。const
和let
都会提升,但都会受到限制,因此在声明之前不能使用它们。@ZachB我同意。为我辩护,const
在邋遢模式下的行为会有所不同。。谢谢你指出,我删除了错误的部分。为什么不疯狂使用它呢