【问题标题】:AngularJS $timeout call function vs anonymous function vs expressionAngularJS $timeout 调用函数 vs 匿名函数 vs 表达式
【发布时间】:2016-11-25 12:55:59
【问题描述】:
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/

【问题讨论】:

  • 这就是 JavaScript 的工作原理。这就是为什么$timeout 需要一个函数
  • 什么是“内联命令”
  • 我会提到表达式。我修正了标题。

标签: javascript angularjs timeout


【解决方案1】:

$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

【讨论】:

    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多