我无法理解 this paragraph :
Declare all local variables with either
const
orlet
. Use const by default, unless a variable needs to be reassigned. Thevar
keyword must not be used
谁能解释一下这是什么意思?为什么我不应该使用“var”关键字?
最佳答案
这些约定假设 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
因为您最终会得到很多您永远不想更改其值的“变量”。
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);
.as-console-wrapper {
max-height: 100% !important;
}
同样,性能差异几乎无关紧要(并且随着引擎在可能的情况下更好地优化它而变得更小),而且很多时候你想要第二种形式的行为(这就是为什么它被这样定义) .但它就在那里。
关于javascript - 谷歌 JS 编码约定 - "The var keyword must not be used",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282992/