我在 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/