这是最奇怪的事情。我的代码如下:
function menuSwipe(init){
dojo.query('div.fill div.container div.menu div.group ul').forEach(function(item){
dojo.fx.wipeOut({
node: item,
duration: 1
}).play();
dojo.query('li', item).forEach(function(childrenItem){
if (dojo.hasClass(childrenItem, 'active'))
childrenItem.parentNode.className = 'items active';
});
if (item.className == 'items active') {
dojo.query('div.category', item.parentNode).forEach(function(parentItem){
setTimeout(function(){
menuOpen(parentItem, init);
doGrayscale(parentItem);
}, 100);
});
}
});
}
基本上init
会保留在内存中,直到它进入if (item.className == 'items active')
条件。之后变为undefined
。这是我设置的布尔值。只要它在if (item.className == 'items active')
之前,它就会保留其价值。我没有理由这样做。我尝试this.init =
并将其设为var init = init
。有没有人知道或者有什么方法可以在整个功能中保留其价值?它不是初始命名,我尝试了一个不同的名称,它仍然做同样的事情。
谢谢, 达伦
答案 0 :(得分:2)
问题是在函数完成后超时正在运行,因此当超时运行时,parentItem变量已超出范围。
在该范围内创建一个局部变量,以便为超时函数创建一个闭包。这样每次迭代都有自己的变量:
dojo.query('div.category', item.parentNode).forEach(function(parentItem){
var itemCopy = parentItem;
window.setTimeout(function(){
menuOpen(itemCopy, init);
doGrayscale(itemCopy);
}, 100);
});