Javascript - 如何使用新约定声明名称空间对象

Javascript - how to declare namespace objects using new conventions

我非常喜欢最新的编程约定和编程语言的最新添加。最近我在 Google Guidelines 中读到我们应该使用 constlet 而不是 var

现在在我的项目中我有命名空间对象变量(如果这是它们的名称,如果我错了请纠正我)像这样

var myObj = {

    func1: {},
    func2: {}
};

var myOtherObj = {

    var1: 'foo',
    var2: 'bar'
};

我现在应该如何使用新的约定命名这些对象,使用 const 还是 let?我很困惑,因为我不知道这些大物体是否会随着时间而改变......

const 不会阻止对象更改(否则不会 freeze 它们)。它可以防止变量的值发生变化。

例如你仍然可以做

const myObj = {

    func1: {},
    func2: {}
};

然后

myObj.fun3 = function(){...

你不能对用 const 声明的变量做的事情(但这似乎不是你的意愿)是

myObj = {};

模块通常用const声明。

我尝试遵循的一般规则是:const 随处可用,let 不能使用时 constvar 永远不会。

在您的示例中,当您定义对象(或在其他情况下数组等)时,我倾向于使用 let 来定义对象,以清楚地表明变量引用可以更改里面的内容。

const 不会阻止列表中对象或元素的属性被更改,因此如果您不确定这是否会发生,我认为最好使用 let。它更清晰,可以防止混淆。

如果你真的想要一个不能改变值的符号来引用一个同样不可变的对象,你可以这样做:

const CONSTANT = Object.freeze({
  a: "hello",
  b: "world"
});

还要记住,旧平台仍然存在,不支持 constlet(可能 Object.freeze())。