在全局范围内创建的常量在JavaScript中存储在哪里?

时间:2020-01-16 10:08:46

标签: javascript

在JavaScript中存储的全局范围中创建的常量在哪里?

例如,如果我使用KubernetesPodOperator创建变量,则可以通过from airflow.operators.kubernetes_pod_operator import KubernetesPodOperator kubernetes_full_pod = KubernetesPodOperator( task_id='spark-job-task-ex', name='spark-job-task', namespace='default', image='<prebuilt-spark-image-name>', cmds=['bin/spark-submit'], arguments=[ '--master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port>', '--deploy-mode cluster', '--name spark-pi', ' --class org.apache.spark.examples.SparkPi', '--conf spark.executor.instances=5', '--conf spark.kubernetes.container.image=<prebuilt-spark-image-name>', 'local:///path/to/examples.jar' ], #... ) 访问它。

但是,如果我使用var var_example = '123'创建一个const变量,那我该如何访问它呢?

我需要它在函数中创建一个不可变/只读的全局变量。 我可以使用window.var_example在函数中创建普通的全局变量,但是我不知道如何在函数中创建常量/不可变/只读全局变量;在我看来,这可以通过使用常量访问范围并在其中添加所需的变量来完成。

2 个答案:

答案 0 :(得分:2)

使用constlet声明的变量未在窗口because the specification says so上定义。


您可以使用Object.defineProperty()向窗口对象添加属性。默认情况下,这将设置writable: falseconfigurable: false

Object.defineProperty(window, "in_function_var", {
  value: 'global variable'
})

console.log(in_function_var)

in_function_var = "updated"
console.log(in_function_var)

delete window.in_function_var
console.log(in_function_var)

在严格模式下,如果您尝试更新或删除属性,则会引发错误:

"use strict"

Object.defineProperty(window, "global_var", {
  value: 'global variable'
})

try {
  global_var = "updated"
} catch (e) {
  console.error(e)
}

try {
  delete window.global_var
} catch (e) {
  console.error(e)
}

答案 1 :(得分:2)

您可以尝试为窗口对象定义一个不可变的属性。 但这与常量不同。不可能进行更改,但是尝试进行更改时不会出现相同的错误。

"use strict"
const CONST1 = 1;

function setGlobalConst() {
  Object.defineProperty(window, "CONST2", {
      enumerable: false,
      configurable: false,
      writable: false,
      value: 2
  });
};

setGlobalConst();

console.log("CONST1: " + CONST1);
console.log("CONST2: " + CONST2);

// no have error but not mutted
CONST2 = 3;
// error
CONST1 = 2;
相关问题