簡體   English   中英

AngularJS $超時調用函數vs匿名函數vs表達式

[英]AngularJS $timeout call function vs anonymous function vs expression

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);

結果:13425

根據調用順序,結果應為12345.以下行立即執行:

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

如果您添加如下所示的時間參數,則會忽略時間。

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

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

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

在這一行$scope.text += '3'不是一個函數,而是一個表達式。 所以它會在$scope.text = '1';之后執行$scope.text = '1';

要延遲語句,您需要使用函數包裝該語句並將其傳遞給$timeoutsetTimeout 你不能推遲發表聲明。

替換$timeout($scope.text += '3'); $timeout(function(){$scope.text += '3'}) 你會得到輸出14235

$scope.$eval()同步計算函數或表達式,因此在235之前會添加4 改變它

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

將得到預期的輸出12345

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM