何时在JavaScript中使用currying和partial函数

时间:2011-10-28 17:52:16

标签: javascript currying

我在Dobb博士看到post关于JavaScript中的currying和部分函数的问题。它看起来很有用,但我想知道(作为JavaScript中的偶然开发人员)是否存在经常使用的标准情况?

2 个答案:

答案 0 :(得分:3)

一种非常常见的情况是创建事件处理程序。

例如,假设您有一个包含许多链接的文档,例如:

    <a href="http://someurl.com/example">link</a>

假设你想让javascript通过并让所有这些链接显示“你现在要去:&lt; link_url&gt;”单击对话框。在这种情况下,您可以使用以下代码:


    var links = document.getElementsByTagName("a"), len = links.length;
    for (var n = 0; n < len; ++n) {
        links[n].onclick = window.alert.bind(null, "You are now going to: " + links[n].innerText);
    }

Function.prototype.bind()(我在window.alert()上使用)与您链接的文章中使用的partialApply()非常相似。

虽然这个例子本身并不实用,但它离一个更常见的任务并不远:当用户点击通向第三方网站的链接时显示一个确认框。

现在,我们可以使用匿名函数代替window.alert.bind(...)


    links[n].onclick = (function(text) {
        return function() { window.alert(text); };
    })("You are now going to: " + link[n].innerText);

然而,这是更多的代码!大多数currying的例子都可以通过这种方式“简化”,所以它通常只是一个捷径,虽然非常方便。

答案 1 :(得分:3)

对于初学者,我个人不建议在99%的情况下使用currying。如果使用不当,很容易使代码无法读取。

但是,我可以命名的一些应用程序与设置函数上下文有关。例如,当您首次使用上下文(窗口对象等以外的东西)执行currying函数时,您可以使用一个函数,在稍后调用时对原始对象的属性等应用某些计算。

第二种情况是,例如,你有一个带三个参数的函数。 DOM元素,属性名称及其值。这可以转换为可以使用适当的元素启动的currying函数,然后每次执行都会将属性设置为您希望的值。在有许多属性所依赖的条件的情况下,它可能会很有用。