我很难理解this paragraph:
使用
const
或let
声明所有局部变量。 除非需要重新分配变量,否则默认使用const。 不得使用var
关键字
有人可以解释一下这意味着什么吗?为什么我不应该使用' var'关键字?
答案 0 :(得分:3)
这些约定假定为ES2015及更高版本,其中let
和const
可用于替换var
。他们说不再使用var
了,因为let
和const
语义更有用(根据那些约定 [以及我个人的观点] ,这不重要] )。
例如,他们说不要这样做:
function foo() {
for (var i = 0; i < 10; ++i) {
// Do something with i
}
}
相反,要么这样做:
function foo() {
let i;
for (i = 0; i < 10; ++i) {
// Do something with i
}
}
或者这个(但请注意,最后一个版本的性能稍差,而不是通常 1 ):
function foo() {
for (let i = 0; i < 10; ++i) {
// Do something with i
}
}
同样,如果您正在使用其值永远不会更改的变量,请使用const
:
function getTomorrow() {
const date = new Date();
date.setDate(date.getDate() + 1);
return date;
}
我们可以在那里使用const
,因为date
的值永远不会改变(只是它引用的对象的状态)。
如果你和我一样,当你将这些付诸实践时(我不遵循这些约定,但我确实遵循了使用let
和const
的具体示例),如果您正在使用其他良好做法(比如保持较小的功能等),您会对使用const
而不是let
的频率感到惊讶,因为您结束了很多&#34;变量&#34;你永远不想改变自己的价值观。
1 你可能想知道为什么会有性能差异
function foo() {
let i;
for (i = 0; i < 10; ++i) {
// Do something with i
}
}
和
function foo() {
for (let i = 0; i < 10; ++i) {
// Do something with i
}
}
原因是在第二个中,为每个循环迭代创建了一个 new i
变量。我们可以看到,如果我们在循环中创建一个闭包:
function foo1() {
console.log("let outside the loop:");
let i;
for (i = 0; i < 5; ++i) {
setTimeout(() => {
console.log(i);
}, 0);
}
}
function foo2() {
console.log("let inside the loop:");
for (let i = 0; i < 5; ++i) {
setTimeout(() => {
console.log(i);
}, 0);
}
}
foo1();
setTimeout(foo2, 50);
&#13;
.as-console-wrapper {
max-height: 100% !important;
}
&#13;
同样,性能差异几乎从不重要(并且随着引擎在可能的情况下更好地优化它们会变得更小),并且很多时候你想要第二种形式的行为(这就是它的原因)这样定义)。但它就在那里。