此代码来自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;
}
答案 0 :(得分:2)
在这种情况下,它似乎是一个用于为值生成setter / getter函数的函数。
如果没有看到更多使用它的上下文,人们只能猜到为什么这样做。然而,从它的外观来看,我认为它被用来更容易生成具有某些行为的动态对象(例如,通过某些验证来获取/设置值)。
与您的替代方案相比,考虑到返回的函数使用this
关键字,它可能甚至不会起作用。很可能它被分配到一个对象中,因此this
将引用该对象。
正如评论中指出的那样,它基本上是currying,但是也有可能用于生成函数的数据不能在使用生成函数的后期作为参数传递,因为angular会进行一些编译/链接数据绑定,其中信息可能仅在编译/链接阶段可用。
关闭这两个参数也可能会有一些非常(非常非常)的性能优势。