Javascript函数变量突然变得不确定?

时间:2010-10-28 23:38:35

标签: javascript dojo

这是最奇怪的事情。我的代码如下:

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。有没有人知道或者有什么方法可以在整个功能中保留其价值?它不是初始命名,我尝试了一个不同的名称,它仍然做同样的事情。

谢谢, 达伦

1 个答案:

答案 0 :(得分:2)

问题是在函数完成后超时正在运行,因此当超时运行时,parentItem变量已超出范围。

在该范围内创建一个局部变量,以便为超时函数创建一个闭包。这样每次迭代都有自己的变量:

dojo.query('div.category', item.parentNode).forEach(function(parentItem){
  var itemCopy = parentItem;
  window.setTimeout(function(){
    menuOpen(itemCopy, init);
    doGrayscale(itemCopy);
  }, 100);
});