javascript - IIFE 中的常量变量的值在它之外被改变了吗?这怎么可能?
问题描述
我在 IIFE 中有一个常量变量。正在返回此变量,我不知道为什么可以更改它。
我的代码如下所示:
const main = (function(args) {
"use strict";
let window = args.window, document = window.document, location = window.location;
let $ = args.jQuery || null;
const CONSTANTS = {
config: {
appRoot: "http://localhost/development/.../console/",
apiRoot: "http://localhost/development/.../api/"
}
}
return {
CONSTANTS
};
}({ window, jQuery }));
console.log(main.CONSTANTS);
console.log(main.CONSTANTS.config.appRoot = null); /* returns null */
console.log(main.CONSTANTS); /* value of appRoot is null now */
现在,当我打开控制台并写入main.CONSTANTS.config.appRoot = null
时,它只是返回null
. 我不想改变这个值。难道我做错了什么?我错过了一些太基本的东西吗?
另外,这个main
存储在哪里?它不作为typeof window.main
返回undefined
和typeof main
返回存储在窗口对象中object
。
解决方案
也许试试Object.freeze
const main = (function(args) {
const CONSTANTS = Object.freeze({
config: Object.freeze({
appRoot: "http://localhost/development/.../console/",
apiRoot: "http://localhost/development/.../api/"
})
});
return Object.freeze({
CONSTANTS
});
}());
console.log(main.CONSTANTS);
console.log(main.CONSTANTS.config.appRoot = null);
console.log(main.CONSTANTS.config = null);
console.log(main.CONSTANTS);
推荐阅读
- sql-server - 数据仓库 GUID 到 Int PrimaryKeys
- android - 我无法在操作栏上获得图标
- node.js - npm start 在反应项目中不起作用
- hive - 如何获取 HIVE/PySpark 表中每一列的唯一值?
- ios - 如何监听通知授权状态的变化
- sql-server - 如何每秒更新一次 Azure 搜索索引?
- windows - 如何在 Windows 中重置 bcdedit /dbgsettings?
- python - 在 Python 中将一小时的传感器数据划分为 10 分钟的间隔?
- android - 无法从 MainActivity 类以外的类创建/更新 GUI
- php - 如何使用 FPDI 使用 pdf 模板