从函数到函数的JavaScript全局动态变量未定义,似乎是局部范围

时间:2016-06-14 13:08:57

标签: javascript scope global-variables undefined dynamic-variables

我遇到了这两个功能的相互作用问题。它们用于元素的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

有谁知道我为什么看到我所看到的以及我能做些什么来使这些动态变量从功能到功能全局运作?感谢。

1 个答案:

答案 0 :(得分:1)

window["wasIHiddenBefore_" + targetID] == true;是一种比较,而非作业。尽管记录“ ...创建为真”,但您从未设置变量。你想要window["wasIHiddenBefore_" + targetID] = true;