您的问题(或多个问题)相当广泛。你在这里混淆和组合了多个概念,但我会尝试解开你。
首先,IIFE。这与 Angular 性能无关。 IIFE 是一种命名全局范围的方法。因此,最好的做法是使用 IIFE,而不是在可能导致冲突的全局范围内公开函数。
var globalObj =
(function(){
var privateVar = 5;
function doPrivateFn(x, y){}
return {
publicFn: function(x){ doPrivateFn(x, privateVar) };
}
})();
现在,唯一暴露给全局范围的是globalObj,它有globalObj.publicFn()。
第二,IIFE有时会在使用Angular注册服务或控制器时使用,而不是内联匿名函数:.factory("MySvc", function(){}):
(function(){
angular.factory("MySvc", MySvcFactory);
function MySvcFactory($http){
// ...
}
})();
所有这一切都是在全局范围内隐藏 MySvc 工厂函数 MySvcFactory。
最后,让 getter 快速的重点不是内存泄漏,而是 getter 函数的计算强度。
所以,如果你在表达式中有一个绑定,像这样:
<span>{{getCount()}}</span>
或者这个:
<div ng-show="isShown(item)">{{item.prop}}</div>
这个想法是让这些函数非常快,如果不仅仅是一个 getter:
$scope.isShown = function(item){
return (item.a || item.b) && $scope.somethingElse;
}
永远不要做这样的事情:
<div ng-show="isUnique(item)">{{item}}</div>
isUnique 执行 for 循环搜索:
$scope.isUnique = function(item){
for (var i = 0; i < list.length; i++){
if (item === list[i]) return false;
}
return true;
}
因为这个函数会在每个摘要循环中运行,有时甚至会运行多次。相反,计算唯一性并将结果缓存在某处,以便您可以返回它。