2

这段代码来自 AngularJS 源代码,其中有很多这种“函数返回函数”样式的代码。

function locationGetterSetter(property, preprocess) {
  return function(value) {
    if (isUndefined(value))
      return this[property];

    this[property] = preprocess(value);
    this.$$compose();

    return this;
  };
}

与仅具有带有诸如此类的额外参数的“常规”功能相比,这有什么好处-

function locationGetterSetter(property, preprocess, value) {
  if (isUndefined(value))
    return this[property];

  this[property] = preprocess(value);
  this.$$compose();

  return this;
}
4

1 回答 1

2

在这种情况下,它似乎是一个用于为值生成 setter/getter 函数的函数。

在没有看到更多关于使用它的上下文的情况下,人们只能猜测为什么会这样。但是从它的外观来看,我想它被用来更容易地生成具有某些行为的动态对象(例如,通过某些验证获取/设置值)。

this与您的替代方案相比,考虑到返回的函数使用关键字,它可能甚至不会像那样工作。它很可能被分配到一个对象中,因此this将引用该对象。

正如评论中所指出的,它本质上是 currying,但也有可能用于生成函数的数据在使用生成函数的后期阶段不能作为参数传递,因为 angular 会进行一些编译/链接数据绑定,其中信息可能仅在编译/链接阶段可用。

关闭这两个参数也可能有一些非常(非常)小的性能优势。

于 2013-07-28T08:52:26.960 回答