2014-02-28 35 views
3

我正在寫一個angularjs控制器輪詢的東西。輪詢函數自動調用超時。以下是兩個例子。第一個超出了調用堆棧大小,但第二個示例沒有。這是爲什麼?遞歸JavaScript超過調用堆棧大小

例1(超出調用堆棧大小):

myApp.controller('Ctrl1', function($scope, $timeout) { 
    $scope.value = 1; 
    function poll() { 
     $scope.value++; 
     $timeout(poll(), 1000); 
    } 
    poll(); 
}); 

例2(正常工作):

myApp.controller('Ctrl1', function($scope, $timeout) { 
    $scope.value = 1; 
    function poll(){ 
     $timeout(function() { 
      $scope.value++; 
      poll(); 
     }, 1000); 
    };  
    poll(); 
}); 

回答

6

你不流通的功能,但它的返回值(undefined)。這意味着你立即調用它,當它自己調用時,這是你的堆棧溢出。

變化

$timeout(poll(), 1000); 

$timeout(poll, 1000); 

順便說一句,你可以在一個稍微更優雅的方式不污染外部範圍改寫

function poll() { 
    $scope.value++; 
    $timeout(poll, 1000); 
} 
poll(); 

在側面$超時()
0

認沽功能:叟使它像:

$timeout(function(){ 

    pool(); 
    // You can also add some other things here... 

}, 1000): 
相關問題