javascript - 使用绑定(bind)作为柯里化(Currying)的方法

标签 javascript currying

我在 youtube 上看了一个关于函数式编程的视频。他们了解了一些基本的柯里化(Currying)内容(仍在尝试真正掌握它),然后他们展示了一种可以将 bind 用作“软”柯里化(Currying)程序的方法。

function simpleURL(protocol, domain, path) {
  return protocol + "://" + domain + "/" + path;
}

var paths = ["search?query=dogs", "search?query=cats"];

/*
var urls = paths.map(function(path) {
  return simpleURL("http", "www.firefox.com", path);
});
*/

var urls = paths.map(simpleURL.bind(null, "http", "www.firefox.com"));

console.log(urls); // --> ["http://www.firefox.com/search?query=dogs", "http://www.firefox.com/search?query=cats"]

我理解完成事情的注释方式,但不理解带绑定(bind)的 urls。我知道 bind 返回另一个函数,但我没有了解如何通过 bind 设置和使用数组迭代的当前值(即“路径”)。

最佳答案

当您使用 Function.prototype.bind 时像这样:

simpleURL.bind(null, "http", "www.firefox.com")

它会生成一个新函数,用作传递给 map 的回调函数。这个新函数使用两个附加参数调用:“http”和“www.firefox.com”。所以实际上它看起来像这样:

paths.map(function(path) {
    return simpleURL.call(null, "http", "www.firefox.com", path);
});

关于javascript - 使用绑定(bind)作为柯里化(Currying)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29726222/

相关文章:

javascript - jQuery jqGrid 中的事件之前排序

javascript - 为什么我不能在 Jquery Selector 中使用变量?

javascript - twitter typeahead.js process() 使用未定义填充列表

haskell - 在 Haskell 中使用一元函数和柯里化(Currying)定义加法?

lambda - 在Scheme中柯里化(Currying)一个函数n次

javascript - typescript 错误 : Property 'flat' does not exist on type '[string, unknown][]'

javascript - 是否可以在 Meteor 中创建退出 Hook ?

javascript - 将参数分配给闭包中的局部变量

function - Scheme - 有一个函数返回一个函数

F# 柯里化(Currying)效率?