2013-10-14 52 views
0

我有一個函數,它在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

回答

1

使用自行執行將範圍括起來;刪除this以及。

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

刪除this.它會工作。使用setInterval也可以選擇你。

0

試試這個:

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