0

在下面的代码中,为什么会造成可能的无限递归,为什么内存使用量不断增加,如何解决?

function waitForKeyElements (selectorTxt, actionFunction) {
    if (getElementByXPath(selectorTxt) == null) {
       var timeControl = setInterval (function () {
                    waitForKeyElements (selectorTxt, actionFunction);
                },
                300
            );
    } else {
        clearInterval (timeControl);
        actionFunction();
    }
}
4

1 回答 1

2

该变量对于函数的timeControl每次调用waitForKeyElements()都是本地的- 即timeControl您设置的将不是timeControl您清除的。换句话说,您开始使用的计时器setInterval将永远不会被清除。

将它移到函数之外应该可以解决它。

IE

var timeControl = -1;

function waitForKeyElements (selectorTxt, actionFunction) {
    if (getElementByXPath(selectorTxt) == null) {
       timeControl = setInterval (function () {
                    waitForKeyElements (selectorTxt, actionFunction);
                },
                300
            );
    } else {
        if(timeControl !== -1) clearInterval (timeControl);
        actionFunction();
    }
}

此外,正如用户 Prinzhorn 在评论中指出的那样,在每次调用中使用 setInterval 启动计时器肯定会很麻烦。你真的应该做一个 setTimeout 来确保事情不会失控。

于 2013-04-19T14:28:02.727 回答