Javascript范围,如何保留模块

问题描述:

我有一个函数,它在setTimeout上递归调用自己。问题是它一路上失去了它的范围。Javascript范围,如何保留模块

所以这是我...

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

通过我得到的init不能找到(window对象)错误的第二次。

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

+0

你做一个封闭。 google搜索'javascript closure' – unludo

+0

'notYetReadySoTryAgain'定义在哪里? –

+0

只需省略['this'关键字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this),这与范围无关。你可以通过'setTimeout(init,100)'直接引用'init'函数 - 它不是任何属性。 – Bergi

使用自行执行将范围括起来;删除this以及。

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

删除this.它会工作。使用setInterval也可以选择你。

试试这个:

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