我想拥有一个可以全局保存一个节点的常量,但是我还不知道该节点的值!因此,我必须等到调用特定函数才能获取需要分配给我的全局常量的值。
下面是我当前的代码:
var counter = 0;
let myConstVar; // THIS VARIABLE need to be constant
function FunctionToBeCalled(name){
//some code
if(counter==1){
var myNode = document.getElementById(name);
myConstVar = myNode.cloneNode(true);
}
//some code
}
function Caller(aName){
//some code
counter++;
FunctionToBeCalled(aName);
//some code that will change the behavior of the each node with ID "aName"
}
然后我多次调用函数Caller(每次按一次按钮)。
我上面的代码可以工作,但是每次我输入FunctionToBeCalled myConstVariable的值更改时,它给出的值都不同。
所以我真的需要将变量myConstVar设置为const以保存其值(这是我从调用FunctionToBeCalled获得的第一个节点),以便以后可以使用它并将其分配给另一个变量。
答案 0 :(得分:3)
我建议不要使用全局变量,但是您可以在全局对象上定义一个吸气剂:
Object.defineProperty(globalThis, "myConstVar", {
get() {
return myNode;
}
writable: false, // can't mutate this
configurable: false
});
从那时起,这将使全局“ myConstVar”具有该值,并且无法更改它。
答案 1 :(得分:1)
实际上,如果某个值会在 时可用,则Promise
是保留该值的合适数据结构:
const node = new Promise((resolve) => {
if (document.readyState !== 'loading') {
return resolve(document.getElementById(name).cloneNode(true));
}
document.addEventListener("DOMContentLoaded", () => {
resolve(document.getElementById(name).cloneNode(true));
});
});
这样,变量可以是常量,不能更改,并且分辨率与声明相关。