0

我有一个在 setTimeout 上递归调用自身的函数。问题是它在此过程中失去了范围。

所以这就是我所拥有的...

var module = function () {
    function init() {
        if (notYetReadySoTryAgain) {
            setTimeout(this.init,100);
            return
        }
    }
}

第二次通过我得到一个错误,即 init 无法找到(在 Window 对象上)。

处理跨 setTimeout 维护对模块的引用的规范方法是什么?

4

3 回答 3

1

使用自我执行封闭范围;删除this

var module = function () {
       (function init() {
         if (notYetReadySoTryAgain) {
            setTimeout(init,100);
            return
         }
       })(notYetReadySoTryAgain);
    }
于 2013-10-14T10:47:32.957 回答
0

删除this.它会起作用。

 var module = function () {
   function init() {
     if (notYetReadySoTryAgain) {
        setTimeout(init,100);
        return
     }
   }
}

使用setInterval也可以是您的选择。

于 2013-10-14T10:48:00.943 回答
0

尝试这个:

   var module = (function () {
            (function init() {
                if (notYetReadySoTryAgain) {
                   setTimeout(init,100);
                    return
                }
            })()
        })()
于 2013-10-14T10:48:02.013 回答