为什么我会在很多代码中看到高阶函数?对我而言,它几乎与常规函数完全相同,只有普通函数才能返回你需要的东西,就像返回第二个函数一样,它最终会返回一个值。无论如何都要结束,但现在你只需要编写更多代码。
我已经阅读了这个指南(来源:link),这个人就是从这里开始的:
C
到此:
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' }
他们都返回同样的东西。我错过了什么强大的概念?
答案 0 :(得分:1)
为变量分配正常函数时,
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);
等。换句话说,在这种情况下,高阶函数有点像生成器或工厂方法。它创建了可以应用的一般功能。