Javascript范围,我如何保留模块

时间:2013-10-14 10:44:40

标签: javascript

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

删除this.,它会起作用。

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

使用setInterval也可以选择。

答案 2 :(得分:0)

试试这个:

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