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

Javascript-如何使用新约定声明命名空间对象,javascript,ecmascript-6,conventions,Javascript,Ecmascript 6,Conventions,我非常喜欢最新的编程约定和编程语言的最新添加。最近我读到,我们应该使用const和let而不是var 现在在我的项目中,我有这样的名称空间对象变量(如果这就是它们的名称,请纠正我,如果我错了) var myObj = { func1: {}, func2: {} }; var myOtherObj = { var1: 'foo', var2: 'bar' }; 我现在应该如何使用新的约定命名这些对象,使用const或let?我很困惑,因为我不知道这些大对象

我非常喜欢最新的编程约定和编程语言的最新添加。最近我读到,我们应该使用
const
let
而不是
var

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

var myObj = {

    func1: {},
    func2: {}
};

var myOtherObj = {

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

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

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

例如,你仍然可以这样做

const myObj = {

    func1: {},
    func2: {}
};
然后

myObj.fun3 = function(){...
使用
const
声明的变量(但这似乎不是您的意愿)不能做的是


模块通常用
const
声明。我尝试遵循的一般规则是:
const
在任何地方都可以使用,
在不能使用
const
var
时,让
使用

在您的示例中,当您定义对象(或在其他情况下定义数组等)时,我倾向于使用
let
来定义这些对象,以明确指示变量引用可能会更改或其中的内容


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

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

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

还要记住,旧的平台仍然存在,它们不支持
const
let
(可能是
Object.freeze()

将它们更改为
const
,然后运行代码。如果它因为某些东西想要修改变量而中断,要么修复它,要么将其更改为
let
。问题是我不太明白这样一个大对象更改意味着什么,如果它是一个简单的局部变量,然后很容易看出它是否被更改了
const
声明不会使对象不可变;它使变量不可变。不要使用名称空间对象;使用ES6模块。@Gothdo这是什么?我为什么要使用它?在我的示例中,如果myOtherObj.var1在运行时多次更改值会怎么样?如果myOtherObj被声明为const,它会工作吗?是的,它仍然会工作,但在语义上很混乱。正如我所说,
const
不会阻止对象属性或列表元素被更改,它只是阻止变量引用的赋值。因此,在您的情况下,如果对象
myOtherObj
的内容可以多次更改,那么使用
let
可以清楚地表明您的意图。
const CONSTANT = Object.freeze({
  a: "hello",
  b: "world"
});