Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Javascript函数内部定义全局常量?_Javascript_Constants - Fatal编程技术网

如何从Javascript函数内部定义全局常量?

如何从Javascript函数内部定义全局常量?,javascript,constants,Javascript,Constants,我正在构建一个由一组模块组成的应用程序,这些模块在应用程序引导时加载: const MODULES = [] function registerModules(config) { return modules.map(module => (new module(config)).install()); } function bootstrap() { MODULES = registerModules({...}); } 当然,上述情况会引起错误。我想做的是只在应用程序启动

我正在构建一个由一组模块组成的应用程序,这些模块在应用程序引导时加载:

const MODULES = []

function registerModules(config) {
  return modules.map(module => (new module(config)).install());
}

function bootstrap() {
  MODULES = registerModules({...}); 
}
当然,上述情况会引起错误。我想做的是只在应用程序启动时分配模块常量,然后它应该被修复。这可能吗

模块的初始化必须在引导程序内部进行,因为我必须将配置变量传递给RegisterModule。

如果确实需要:

在尚未调用引导期间,具有初始化但为空的模块阵列,以及 使模块在填充后不可变,以及 保持RegisterModule的当前函数签名不变; 然后,您可以按如下方式进行操作:

function bootstrap() {
    Object.freeze(Object.assign(MODULES, registerModules({...}))); 
    // OR:
    // MODULES.push(...registerModules({...})); 
    // Object.freeze(MODULES);
}
const globals = {};

function bootstrap() {
  globals.MODULES = registerModules({...});
  Object.freeze(globals.MODULES);
}
如果在调用bootstrap之前您不坚持模块的存在,并且您愿意将该信息存储在对象中,那么您可以按如下方式进行操作:

function bootstrap() {
    Object.freeze(Object.assign(MODULES, registerModules({...}))); 
    // OR:
    // MODULES.push(...registerModules({...})); 
    // Object.freeze(MODULES);
}
const globals = {};

function bootstrap() {
  globals.MODULES = registerModules({...});
  Object.freeze(globals.MODULES);
}
一旦您对globals满意,您还可以冻结该对象:

Object.freeze(globals);

完整地说,还可以冻结单个模块,而不仅仅是模块变量。。。虽然OP没有提到单个模块是否也应该被修复。谢谢,这似乎是目前唯一可用的选项,虽然它只能确保不变性,但仍然可以完全重新分配。@adnanmuttaleb,你能解释一下完全重新分配是什么意思吗?一旦引导程序执行,模块=、模块[0]=都不会工作…@trincot我的意思是模块=,因为模块[0]=意味着对象是可变的。模块=甚至不会在原始代码中工作,因为常量?这就是我建议Object.assign/.push的原因。。。。。。