Javascript范围,如何保留模块

Javascript范围,如何保留模块,javascript,Javascript,我有一个函数,它在setTimeout时递归调用自己。问题是,它一路上失去了作用范围 这就是我所拥有的 var module = function () { function init() { if (notYetReadySoTryAgain) { setTimeout(this.init,100); return } } } 第二次通过时,我得到一个无法找到init的错误(在窗口对象上) 处理跨

我有一个函数,它在setTimeout时递归调用自己。问题是,它一路上失去了作用范围

这就是我所拥有的

var module = function () {
    function init() {
        if (notYetReadySoTryAgain) {
            setTimeout(this.init,100);
            return
        }
    }
}
第二次通过时,我得到一个无法找到init的错误(在窗口对象上)


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

使用自执行来封闭作用域;同时删除

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

删除此。,它就会工作

 var module = function () {
   function init() {
     if (notYetReadySoTryAgain) {
        setTimeout(init,100);
        return
     }
   }
}
您也可以选择使用
setInterval

试试以下方法:

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

你做个了结。谷歌搜索“javascript闭包”哪里定义了
notYetReadySoTryAgain
?只需省略,这与范围无关。您可以通过
setTimeout(init,100)
直接引用
init
函数-它不是任何东西的属性。