对于函数范围的变量,const而不是var?

时间:2018-05-07 17:10:34

标签: javascript ecmascript-6

我一直在阅读关于Principle of Least Privilege的信息,我很困惑何时使用letvar对比const,特别是在功能级范围内。

read

  

在您知道需要阻止范围的地方使用let,并且您已经专门考虑了这些影响。但是继续使用var来表示不容易被块作用域的变量,或者不应该是块作用域的变量。在现实世界的代码中会有一些地方,其中一些变量将被适当地限定为整个函数,对于那些变量,var是一个更好的信号。

const可以var用于函数范围的变量吗?例如:

function foo() {
    const a = 10;

    if (a > 2) {
        let b = a * 3;
        console.log(b);
    }

    if (a > 5) {
        let c = a / 2;
        console.log(c);
    }

    console.log(a);
}

而不是:

function foo() {
    var a = 10;

    if (a > 2) {
        let b = a * 3;
        console.log(b);
    }

    if (a > 5) {
        let c = a / 2;
        console.log(c);
    }

    console.log(a);
}

1 个答案:

答案 0 :(得分:1)

对于上述代码,应使用const代替varlet,因为您使用变量a输出新变量b& c)并且不操纵或更改变量a本身。换句话说,值'a'在整个条件语句中保持不变。

  • Const:如果您根本不需要更改变量的值,请使用const
  • 允许:如果您以后必须更改变量值,请使用'let'。
  • Var:避免使用var,因为'let'有一个重要的范围机制,'var'没有调用块范围
  

let允许您声明范围有限的变量   使用它的块,语句或表达式。这与此不同   var关键字,它全局定义变量,或者本地定义变量   整个函数,无论块范围如何。

     

通过 - Mozilla Docs