AngularJS $超时调用函数vs匿名函数vs表达式

时间:2016-11-25 12:55:59

标签: javascript angularjs timeout

var four = function() {
    $scope.text += '4';
}

var five = function() {
    $scope.text += '5';
}

$scope.text = '1';

$timeout(function () {
    $scope.text += '2'
});

$timeout($scope.text += '3');

$timeout($scope.$eval(four));

$timeout(five);

结果:1​​3425

根据呼叫顺序,结果应为12345。 下面的行立即执行:

$timeout($scope.text += '3');
$timeout($scope.$eval(four));

如果您添加如下所示的时间参数,则会忽略时间。

$timeout($scope.text += '3', 1000);
$timeout($scope.$eval(four), 1000);

https://jsfiddle.net/uj9yx9c7/1/

1 个答案:

答案 0 :(得分:3)

$timeout($scope.text += '3');

此行中的

$scope.text += '3'不是函数,而是表达式。所以它会在$scope.text = '1';之后执行。

要延迟语句,您需要使用函数包装该语句并将其传递给$timeoutsetTimeout。你不能推迟陈述。

$timeout($scope.text += '3');替换为$timeout(function(){$scope.text += '3'})。 您将获得输出14235

$scope.$eval()同步评估函数或表达式 4之前会添加235。 将其改为

$timeout(function(){$scope.$eval(four)})

将获得预期的输出12345