Javascript变量正在改变它的价值,原因可能导致这样的?

时间:2015-01-24 19:40:20

标签: javascript jquery

我正在调试我见过的最奇怪的错误。此时我的代码看起来像这样。

        var counter = 0;
function setup() {
    var count = ++counter;
    var test = false;

    function getSetter(arg?) {
        if (typeof (arg) !== "undefined") {
            console.log(["setting",count, arg]);
            test = arg;
        } else {
            console.log(["getting",count, test]);
            return test;
        }

    }
    return getSetter;
}
var verticalScrollDisabled = setup();

这是一个封闭的范围,我确保在上述代码之外不访问变量测试。我可以将它更改为任何具有相同结果的名称。更新了它的明确表明它不在此范围之外访问。并用计数器更新,以显示其未写入。

从控制台复制粘贴结果。

 ["enter scroll area", div.fxs-blade-content, true, "3511>401 || 577>585"]    HorizontalScrollBindingHandler.ts:12 
 ["setting", 1,true]    HorizontalScrollBindingHandler.ts:132 
 disable vert    HorizontalScrollBindingHandler.ts:72 
 n.Event {originalEvent: WheelEvent, type: "mousewheel", isDefaultPrevented: function, timeStamp: 1422128039040, jQuery21104183536011260003: true…}    HorizontalScrollBindingHandler.ts:15 
 ["getting", 1,false]    HorizontalScrollBindingHandler.ts:15 
 ["getting", 1, false]    HorizontalScrollBindingHandler.ts:75 
 [false, false]

问题

如评论所述,我的问题是如跟踪中所见。变量get设置为true,但是当它被再次访问时它是false。我不知道为什么会发生这种情况。

并且处理程序附加到mousescroll事件。

var scrollHorizontally =(e) => {

         //   console.log([verticalScrollDisabled(), scrollInAction]);
            console.log(e);
            if (verticalScrollDisabled() && !scrollInAction)
                return;
            console.log([verticalScrollDisabled(), scrollInAction]);

这段代码一直在工作,除了我们在一些单独的代码中打开一个弹出窗口并再次关闭它之外,没有任何改变。有没有什么可以导致事件做出与预期有关的事情,如果窗口失去焦点或什么?同样,测试变量不会在verticalcrollDisabled函数之外更改,因此我不知道为什么它可以将自身更改为false,请注意["设置",true]。

刚刚确认弹出窗口不是原因。

继承人孔文件。 https://gist.github.com/s093294/e49ed46d2680c1403e3b

1 个答案:

答案 0 :(得分:0)

答案是,验证您的假设。

我假设文件未加载两次,因为它是使用define定义并加载了requirejs的模块。由于有一些ID映射使得两个id加载了这个文件,并且正如其中一条评论所说的那样,这使得它成为可能。这就没有用了。

我解决了requirejs配置和问题泄漏。