使用bind作为currying的方法

时间:2015-04-19 05:35:51

标签: javascript currying

我在youtube上观看有关函数式编程的视频。他们已经通过一些基本的讨论(仍然试图真正掌握它),然后他们展示了一种方法,你可以使用绑定作为"软"咖喱-ER。

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设置和使用当前值的数组迭代(即" path")。

2 个答案:

答案 0 :(得分:2)

当你像这样使用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);
});

答案 1 :(得分:0)

simpleURL.bind(null,“http”,“www.firefox.com”)返回的函数与原始函数的工作方式相同,但协议和域总是等于“http”和“www.firefox” .com“,它现在只需要一个参数,即路径的值。

当你调用map函数时,它会将数组的每个值传递给你的新函数,该值将成为path的值。