我写了一些有关$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

09-25 19:36