Javascript 生命内部的常量变量值在生命外部发生变化?这怎么可能?

Javascript 生命内部的常量变量值在生命外部发生变化?这怎么可能?,javascript,iife,Javascript,Iife,我的生命中有一个常量变量。这个变量正在返回,我不知道为什么可以更改它 我的代码如下所示: const main=(函数(args){ “严格使用”; 让window=args.window,document=window.document,location=window.location; 设$=args.jQuery | | null; 常数={ 配置:{ 批准:“http://localhost/development/.../console/", 芹菜根:“http://localhost

我的生命中有一个常量变量。这个变量正在返回,我不知道为什么可以更改它

我的代码如下所示:

const main=(函数(args){
“严格使用”;
让window=args.window,document=window.document,location=window.location;
设$=args.jQuery | | null;
常数={
配置:{
批准:“http://localhost/development/.../console/",
芹菜根:“http://localhost/development/.../api/"
}
}
返回{
常数
};
}({window,jQuery}));
console.log(main.CONSTANTS);
console.log(main.CONSTANTS.config.approt=null);/*返回空值*/
console.log(main.CONSTANTS);/*Approt的值现在为空*/
现在,当我打开控制台并写入
main.CONSTANTS.config.approt=null
时,它只返回
null
。我不希望更改此值。我做错什么了吗?我是否错过了一些太基本的东西

另外,此
main
存储在哪里?它不作为窗口的类型存储在窗口对象中。main返回未定义的
main的类型
返回
对象

const main=(函数(args){
常量=Object.freeze({
配置:Object.freeze({
批准:“http://localhost/development/.../console/",
芹菜根:“http://localhost/development/.../api/"
})
});
return Object.freeze({
常数
});
}());
console.log(main.CONSTANTS);
console.log(main.CONSTANTS.config.approt=null);
console.log(main.CONSTANTS.config=null);
console.log(main.CONSTANTS)也许可以试试

const main=(函数(args){
常量=Object.freeze({
配置:Object.freeze({
批准:“http://localhost/development/.../console/",
芹菜根:“http://localhost/development/.../api/"
})
});
return Object.freeze({
常数
});
}());
console.log(main.CONSTANTS);
console.log(main.CONSTANTS.config.approt=null);
console.log(main.CONSTANTS.config=null);

console.log(main.CONSTANTS)将引用声明为“const”并不意味着它所引用的内容是不可变的。接下来的问题可能会问,为什么需要对象是不可变的?如果是为了“安全性”,那么在客户端执行代码时,您永远不会满意。哦,不,不是为了安全性,将引用声明为“const”不会使它所指的内容不可变。接下来的问题可能会问,为什么需要对象不可变?如果是为了“安全”,那么在客户端执行代码时,您永远不会满意。哦,不,这不是为了安全。是的,它适用于我的大多数情况,但在嵌套对象的情况下会失败。@Rocker2102我的示例有嵌套对象,而且似乎有效。你能更具体地说明如何使它不起作用吗?(注意:我的示例使用Object.freeze两次。)@Rocker2102我编辑了这个,添加了另一个Object.freeze,以防问题出在可写配置键上。是的,谢谢你的帮助,但是如果我在对象中有更多属性呢。这会导致很多Object.freeze(),我认为这不好?@Rocker2102也许下面文章中的一个答案会有帮助:是的,它适用于我的大多数情况,但在嵌套对象的情况下会失败。@Rocker2102我的示例有嵌套对象,而且似乎有效。你能更具体地说明如何使它不起作用吗?(注意:我的示例使用Object.freeze两次。)@Rocker2102我编辑了这个,添加了另一个Object.freeze,以防问题出在可写配置键上。是的,谢谢你的帮助,但是如果我在对象中有更多属性呢。这会导致很多Object.freeze(),我认为这不好?@Rocker2102也许以下帖子中的一个答案会有所帮助: