JavaScript 函数之间未定义的全局动态变量,似乎是局部作用域

JavaScript global dynamic variable undefined from function to function, seems to be local scope

我对这两个函数的交互有疑问。它们用于元素的 onclick 调用。本质上(由于我无法控制的事情)我需要记住隐藏元素的时间和内容。

除了 show 函数中的未定义检查外,一切都完全按照我的意愿进行。当我隐藏东西时我创建了一个全局变量,当我想要显示东西时我想再次使用它。我唯一的问题是在 show 函数中,我认为是全局变量的似乎不是。

function branchShow(targetID, triggerID){
    var target = document.getElementById(targetID);
    var trigger = document.getElementById(triggerID);
    var parentID = trigger.parentElement.parentElement.parentElement.parentElement.id;
    var globalMemory = "wasIHiddenBefore_" + parentID

    if (typeof window[globalMemory] !== "undefined"){
        if (window[globalMemory]) {
            console.log(globalMemory + " is evaluated true");
            window[globalMemory] = false;
        } else {
            console.log(globalMemory + " is evaluated false");
            target.setAttribute("style","display: block;");
        }
    } else {
        console.log(globalMemory + " is undefined");
        target.setAttribute("style","display: block;");
    }
};

function branchHide(targetID, triggerID){
    if (typeof i !== "undefined" ) {var iMemory = i;}
    if (typeof j !== "undefined" ) {var jMemory = j;}
    if (typeof k !== "undefined" ) {var kMemory = k;}
    var target = document.getElementById(targetID);
    target.setAttribute("style","display: none;");

    //don't want to flag on load
    if (hasLoadFinished){
        window["wasIHiddenBefore_" + targetID] == true;
        console.log("wasIHiddenBefore_" + targetID + " created as true");
    }
    .
    .
    .

示例执行的控制台输出如下。第 4 行和第 6 行是显示问题最关键的。

wasIHiddenBefore_1e16f2513f7842d5be352ca01b5c1c3f is undefined
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b is undefined
wasIHiddenBefore_2d869e44f4c44454a8415eecbd64061e created as true
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b created as true
wasIHiddenBefore_1e16f2513f7842d5be352ca01b5c1c3f is undefined
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b is undefined

有谁知道我为什么看到我所看到的以及我可以做些什么来使这些动态变量在函数之间全局作用?谢谢

window["wasIHiddenBefore_" + targetID] == true;是比较,不是赋值。尽管记录了“... created as true”,但您从未设置变量。你想要 window["wasIHiddenBefore_" + targetID] = true;.