为什么我在很多代码中看到高阶函数?在我看来,这与常规函数几乎完全相同,只是使用常规函数就可以返回所需的东西,就像返回第二个函数所做的一样,无论如何最终都会返回一个值,但是现在您只需要编写更多代码。

我已经阅读了本指南(来源: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/

10-12 12:58
查看更多