簡體   English   中英

何時在JavaScript中使用currying和partial函數

[英]When to use currying and partial functions in JavaScript

我讀了Dobb博士關於JavaScript中的currying和部分函數的這篇文章 它看起來很有用,但我想知道(作為偶爾的JavaScript開發人員)是否存在經常使用的標准情況?

一個非常常見的場景是創建事件處理程序。

例如,假設您有一個包含許多鏈接的文檔,例如:

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

假設你想讓javascript通過並讓所有這些鏈接顯示“你現在要去:<link_url>”對話框點擊。 在這種情況下,您可以使用以下代碼:


    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的例子都可以通過這種方式“簡化”,所以它通常只是一個捷徑,雖然非常方便。

對於初學者,我個人不建議在99%的案例中使用currying。 如果使用不當,很容易使代碼無法讀取。

但是,我可以命名的一些應用程序將與設置函數上下文相關聯。 例如,當您首次使用上下文(窗口對象等除外)執行currying函數時,您可以使用一個函數,在稍后調用時對原始對象的屬性等應用某些計算。

第二種情況是,例如,你有一個帶三個參數的函數。 DOM元素,屬性名稱及其值。 這可以轉換為可以使用適當的元素啟動的currying函數,然后每次執行都會將屬性設置為您希望的值。 在有許多屬性所依賴的條件的情況下,它可能很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM