2017-08-09 204 views
1

我想將一個參數傳遞給一個函數內的函數;將參數傳遞給一個函數內的函數 - javascript

function add() { 
    let x = arguments[0]; 

    function s(num) { 
    return num + x; 
    } 
} 

add(2)(3) //second argument to be passed to 'function s'. 

所以想即時調用返回5

什麼是對此最好的方法呢?提前致謝。

+0

可能是[*函數接受可變數量的鏈接調用,例如'add(1)(2)(3)(4)'*]的副本(https://stackoverflow.com/questions/45162228/function-對接受變量用戶號碼的鏈通話樣add1234)。 – RobG

回答

2

Currying是允許部分應用函數參數的構造名稱。這意味着不是將多個參數傳遞給一個函數並期望得到最終結果,而是可以傳遞這個參數的一個子集並獲得一個正在等待其餘部分的函數。

正如已經@KevBot指出,你的榜樣缺少第二個函數的返回,並會:

function add() { 
    let x = arguments[0]; 

    return function s(num) { 
    return num + x; 
    } 
} 

add(2)(3); 

ES6 Curryed的Hello World:

curryedHelloWorld = (greeting) => (name) => `${greeting}, ${name}!`; 
curryedHelloWorld("Hello")("Tygar"); 

你甚至可以解開curryedHelloWorld示例使其成爲相反的方式:

helloworld = (greeting, name) => curryedHelloWorld(greeting)(name); 
helloworld("Hello", "Tygar"); 
+0

在[*'[javascript] currying' *](https://stackoverflow.com/search?q=%5Bjavascript%5D+currying)上搜索會返回超過1,000個結果,當然,一個適合作爲重複?我不清楚OP是否想要捲曲或鏈接。也許[* Variadic咖喱和函數*](https://stackoverflow.com/questions/5832891/variadic-curried-sum-function)? – RobG

相關問題