在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
在函数中创建普通的全局变量,但是我不知道如何在函数中创建常量/不可变/只读全局变量;在我看来,这可以通过使用常量访问范围并在其中添加所需的变量来完成。
答案 0 :(得分:2)
使用const
和let
声明的变量未在窗口because the specification says so上定义。
您可以使用Object.defineProperty()
向窗口对象添加属性。默认情况下,这将设置writable: false
和configurable: 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;