首页 > 解决方案 > 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返回undefinedtypeof main返回存储在窗口对象中object

标签: javascriptiife

解决方案


也许试试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);


推荐阅读