为什么我在很多代码中看到高阶函数?在我看来,这与常规函数几乎完全相同,只是使用常规函数就可以返回所需的东西,就像返回第二个函数所做的一样,无论如何最终都会返回一个值,但是现在您只需要编写更多代码。
我已经阅读了本指南(来源:link),这里的家伙来自于此:
function getAttribute(attr) {
return typeof this.getAttribute(attr) != 'undefined';
}
var accessors = {
sortable: {
get: function() {
return getAttribute('sortable');
}
},
droppable: {
get: function() {
return getAttribute('droppable');
}
}
};
对此:
function generateGetMethod(attr) {
return function() {
return typeof this.getAttribute(attr) != 'undefined';
};
}
var accessors = {
sortable: {
get: generateGetMethod('sortable')
},
droppable: {
get: generateGetMethod('droppable')
}
};
最后,引用该链接的话说:“这是一种非常有用的技术,可以使您免于重复同样的代码,并且如果使用正确,则易于理解和维护!”
对我来说,这使我感到困惑,因为当我可以只将返回函数分配给一个单独的变量,或者只使用带有附加参数的普通函数时,为什么函数返回另一个函数?
这是一个正常功能:
function water(userArg) {
return {
water: userArg
};
}
console.log(water('is liquid')); // returns: { water: 'is liquid' }
这是一个高阶函数:
function water() {
return function (valueOfWater) {
return {
water: valueOfWater
};
};
}
console.log(water()('is liquid')); // returns: { water: 'is liquid' }
他们俩都返回同一件事。我缺少什么强大的概念?
最佳答案
在为变量分配普通函数时,
function getAttribute(attr) {
return typeof this.getAttribute(attr) != 'undefined';
}
var x = getAttribute(attr);
那么
x
将成为函数返回的值。这里没什么特别的。但是,高阶函数的功能在这里很明显:
function generateGetMethod(attr) {
return function() {
return typeof this.getAttribute(attr) != 'undefined';
};
}
var y = generateGetMethod(attr);
在这种情况下,
y
实际上等于一个函数,并且可以使用不同的参数(例如y(attributeA);
等)进行调用。换句话说,在这种情况下,高阶函数的行为类似于生成器或工厂方法。它创建可以应用的常规功能。关于javascript - 高阶函数的意义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45133815/