这是最奇怪的事情。我的代码如下:
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
。有谁知道或者有什么方法可以在整个函数中保留其价值吗?这不是 init 命名,我尝试了不同的名称,但它仍然做同样的事情。
谢谢,
达伦
问题在于,超时是在函数完成后运行的,因此当超时运行时,parentItem 变量已超出范围。
在该范围内创建一个局部变量,以便为超时函数创建一个闭包。这样每次迭代都有它自己的变量:
dojo.query('div.category', item.parentNode).forEach(function(parentItem){
var itemCopy = parentItem;
window.setTimeout(function(){
menuOpen(itemCopy, init);
doGrayscale(itemCopy);
}, 100);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)