我写了一些有关$timeout
服务的示例代码。
var myModule = angular.module('timerTest',[]);
myModule.controller('counting',function($scope,$timeout)
{
var timerObject;
var count =0;
var countTime = function()
{
count++;
console.log(count);
$scope.value = count;
timerObject = $timeout(countTime,1000);
};
$scope.startTimer = function()
{
console.log('timer start!');
$timeout(countTime,1000);
};
$scope.endTimer = function()
{
console.log('End Timer');
$timeout.cancel(timerObject);
};
});
在我写的
countTime
函数的代码中timerObject = > $timeout(countTime(),1000);
它非常快地调用
countTime()
,这将使调用堆栈溢出。但是当我写
timerObject = $timeout(countTime,1000);
它运作完美。有什么不同吗?
最佳答案
timerObject = $timeout(countTime(),1000)
立即在该行上调用countTime
,并将其结果传递到$timeout
。每当在函数名称后面加上括号时,就意味着您要在此位置调用该函数,然后-由于您在函数的每次迭代中都在执行此操作,因此会导致其不断重复,从而导致堆栈溢出。
另一方面,timerObject = $timeout(countTime,1000)
将countTime
函数本身传递给$timeout
-这是使用服务的正确方法,并且会导致$timeout
在大约1000毫秒后调用countTime
。