【发布时间】:2016-01-06 21:28:47
【问题描述】:
在下面的代码中,
app.controller('Controller', function($scope, $http){
$scope.rep = [];
$scope.tot = {
name: '',
marketValue: 0,
cash: 0,
legend: 'none'
};
(function loadData(){
$http.get('result.json').
then(function(data) {
angular.forEach(data['data'],function(value, key){
$scope.rep[key] = value;
$scope.rep[key].marketValue = parseFloat(value.marketValue);
$scope.rep[key].cash = parseFloat(value.cash);
});
} ,
function(data) {
console.log("My error: " + data);
}
);
})(); // IIFE
for (var i = 0; i < $scope.rep.length; i++) {
$scope.tot.marketValue += $scope.rep[i].marketValue;
$scope.tot.cash += $scope.rep[i].cash;
}
});
$scope.rep 是在 IIFE 的嵌套函数中访问的局部变量。
IIFE执行后,不再执行,平静终止执行。
控制台没有给出任何错误信息。
为什么for循环不执行?
【问题讨论】:
-
因为 AJAX 代表
asynchronous...并且您在$http调用返回之前就已经完成了循环。 -
http.get 调用是异步的,所以当循环执行时,rep.length 还是 0。
标签: javascript angularjs closures