我正在调试我见过的最奇怪的错误。此时我的代码看起来像这样。
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
答案 0 :(得分:0)
答案是,验证您的假设。
我假设文件未加载两次,因为它是使用define定义并加载了requirejs的模块。由于有一些ID映射使得两个id加载了这个文件,并且正如其中一条评论所说的那样,这使得它成为可能。这就没有用了。
我解决了requirejs配置和问题泄漏。