javascript - 谷歌 JS 编码约定 - "The var keyword must not be used"

标签 javascript convention

我无法理解 this paragraph :

Declare all local variables with either const or let. Use const by default, unless a variable needs to be reassigned. The var keyword must not be used

谁能解释一下这是什么意思?为什么我不应该使用“var”关键字?

最佳答案

这些约定假设 ES2015 及更高版本,其中有 letconst,可用于替换 var。他们说不要再使用 var,因为 letconst 语义更有用(根据这些约定 [和我个人的意见,这并不重要])。

例如,他们说不要这样做:

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 的值永远不会改变(只是它所引用的对象的状态)。

如果你和我一样,当你将这些付诸实践时(我不遵循这些约定,但我确实遵循使用 letconst),如果您正在使用其他良好实践(例如保持函数较小等),您会惊讶于您使用 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/

相关文章:

Python - 定义仅使用一次的常量变量的最便捷方式

python - 做Python喜欢 Camel

JavaScript显示:none function

javascript - React-Redux 组件不反射(reflect) Redux Store 中的变化

orm - 使用Doctrine ORM的表命名约定

Javascript:从函数返回值的最佳方法/实践是什么?

rust - 如何在 Rust 中使用链式方法调用编写惯用的构建模式?

javascript - Angular : "TypeError: Cannot read property ' insertBefore' of null"while using Slick Slider

javascript - 使用前瞻和后视正则表达式时出错

javascript - Cycle2 自动停止不工作