5

函数的意义何在

function valueFn(value) {return function() {return value;};}

在 angular.js 中定义。

它用于前。在

var lowercaseFilter = valueFn(lowercase);
register('lowercase', lowercaseFilter);

如果我们直接使用小写字母有什么不同

register('lowercase', lowercase);

而不是上一行。

同样的方法,在方法中

function ngDirective(directive) {
  if (isFunction(directive)) {
    directive = {
      link: directive
    }
  }
  directive.restrict = directive.restrict || 'AC';
  return valueFn(directive);
}

为什么最后一行不是

return directive;

return valueFn(directive);
4

1 回答 1

12

过滤器(和其他一些服务)是常规函数,但 AngularJS 严重依赖依赖注入,因此这些过滤器(函数)不会按原样(作为实例化对象)暴露给客户端,而是由工厂函数创建。这样做是为了让 AngularJS DI 系统可以将依赖项注入工厂函数(这些依赖项在稍后的闭包中可用)。

但是在某些情况下,没有什么可注入的,整个工厂函数的工作归结为返回一个预实例化的值。lowercaseFilter(和许多其他过滤器)就是这种情况。因此,不是重复相同的、几乎什么都不做的工厂函数,而是 valueFn为了避免代码重复而创建的。没有它,AngularJS 代码必须包含:

var lowercaseFilter = function(){
  return lowercase;
};
var uppercaseFilter = function(){
  return uppercase;
};
...

写起来更简洁:

var lowercaseFilter = valueFn(lowercase);
var uppercaseFilter = valueFn(uppercase);
...

简而言之-我怀疑原因是DRY

于 2013-02-23T13:29:46.770 回答