Javascript变量正在改变其值,这可能会导致这种情况

Javascript variable is changing its value, reasons that can cause such?

本文关键字:情况 变量 改变 Javascript      更新时间:2023-09-26

我正在调试我见过的最奇怪的错误。此时,我的代码如下所示。

        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]

问题

如前所述,我的问题是跟踪中看到的。 变量设置为 true,但当再次访问它时,它为 false。我不明白为什么会发生这种情况。

以及附加到鼠标滚动事件的处理程序。

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

答案是,验证你的假设。

我假设该文件没有加载两次,因为它是使用 define 定义并使用 requirejs 加载的模块。这并不成立,因为有一些 ID 映射使两个 id 加载此文件,正如其中一条评论所说,这就是使其成为可能的事情。

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