更高阶函数的意义何在?

时间:2017-07-16 22:25:47

标签: javascript

为什么我会在很多代码中看到高阶函数?对我而言,它几乎与常规函数完全相同,只有普通函数才能返回你需要的东西,就像返回第二个函数一样,它最终会返回一个值。无论如何都要结束,但现在你只需要编写更多代码

我已经阅读了这个指南(来源: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' }

他们都返回同样的东西。我错过了什么强大的概念?

1 个答案:

答案 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);等。换句话说,在这种情况下,高阶函数有点像生成器或工厂方法。它创建了可以应用的一般功能。