考虑这个例子,我需要知道使用高阶函数的好处:
function bind(func, object) {
return function(){
return func.apply(object, arguments);
};
}
我的意思是,像这样的简单函数有什么问题:
function bind(func, object) {
return func.apply(object, arguments);
}
此
function bind(func, object) {
return func.apply(object, arguments);
}
返回CCD_ 1调用的结果。而bind
应该返回一个新的函数,该函数在被调用时将在适当的上下文中调用(object
)。
示例中的好处是您可以获得部分应用程序:
直观地,部分函数应用程序说";如果你修复了函数的第一个参数,你就会得到一个剩余参数的函数"。例如,如果函数div代表除法运算
x / y
,那么参数x固定为1的div(即div 1)是另一个函数:与函数inv
相同,函数inv(y) = 1 / y
返回其参数的乘法逆。部分应用的实际动机是,通过向函数提供一些但不是全部自变量而获得的函数通常是有用的;例如,许多语言具有类似于
plus_one
的函数或运算符。分部应用程序使定义这些函数变得容易,例如,通过创建一个函数来表示以1绑定为第一个参数的加法运算符。
在您的示例中,有三条信息:
- 哪个对象
- 调用哪个方法
- 要提供给该方法调用的参数
使用bind
,您可以决定1和2,而将3留给以后。
请参阅Undercore,以获得另一个将部分应用程序推广到this
之外的示例。