Coffeescript 中的以下虚拟 Controller :
GlobalTimelineController = ($scope, $http) ->
$http.get('/api/globalTimeline').success (posts) ->
$scope.posts = posts
编译为 Javascript,如下所示:
(function() {
var GlobalTimelineController;
GlobalTimelineController = function($scope, $http) {
return $http.get('/api/globalTimeline').success(function(posts) {
return $scope.posts = posts;
});
};
}).call(this);
我想知道 Coffee 编译器添加的这些 return 语句有什么副作用吗?正确性和性能都如何?
我应该关心这个以及方法和回调末尾的空返回吗?
最佳答案
$http.get 调用返回一个所谓的“promise”,其工作原理如下:
promise.success = function(fn) {
promise.then(function(response) {
fn(response.data, response.status, response.headers, config);
});
return promise;
};
取自 AngularJS 源代码 (/src/ng/http.js:700)
这意味着您的函数返回的任何内容都将被忽略,因此如果它是对象,则在您的函数完成后,对它的引用就会丢失。 因此,从正确性的 Angular 来看,这并不重要。
现在,如果我们看看性能,在这种情况下,差异(如果有的话)可以忽略不计。 但是,您始终需要牢记这种行为。如果您在函数中所做的最后一件事是执行一些具有多次迭代的循环,则 CoffeeScript 将返回一个由每个数组迭代的结果组成的大数组(数组理解)。不仅会影响性能,极端情况下还可能导致JS内存不足!
您还可以在末尾附加一个 return 语句,以防止 CoffeeScript 生成此类数组。
关于angularjs - Coffeescript 和 AngularJS 中的隐式返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874695/