2015-08-15 47 views
0

我沒有對函數調用的控制權,我需要傳遞一些帶有指針的參數。可以做到嗎?如何傳遞帶函數簽名的參數

var a = function(a, b){ 
return a + b; 
} 

b = a; //parameter here??? 

任何幫助將不勝感激!

+1

你能否澄清?目前還不清楚你想達到什麼目的。 – krl

+1

我同意這一點不明確。是否爲函數'名稱'選擇'a'的目的?如果不是,那麼我懷疑你會對創建[代理]關閉*感興趣,這些代碼在[Eloquent JavaScript:Higher-Order Functions](http://eloquentjavascript.net/05_higher_order.html)中討論過。 – user2864740

+0

這只是一個例子。 'b'應該用參數 – andrey

回答

1

您可以使用currying,外部函數調用將返回一個指向另一個函數的指針,該函數引用您傳遞的參數。然後你可以在不傳遞參數的情況下調用內部函數。

var a = function(x, y) { 
    function(){ 
     return x + y; 
    } 
} 

b = a(2, 3); 
b(); 
+0

我認爲在這一點上向讀者介紹currying有點太早了,特別是沒有提到技術或解釋。 – nha

+1

也許你是對的,我會給一些解釋,但我認爲這是他想要的 – Gus

+0

@nha我在這裏解釋這個問題很簡單,你能幫忙嗎? – Gus

1

將參數傳遞給a的正確方法是將最後一行替換爲:b = a(1, 2);

這會給你3作爲結果,存儲到變量b。 您可以通過運行console.log(b);在任何時間看到的b當前值:

var a = function(a, b){ 
return a + b; 
} 

b = a(1, 2); // parameters here 

console.log(b); // prints 3 

但正如我所說,使用b這裏兩次是混亂的。一個更好的命名將是:

// sum is a better name 
var sum = function(a, b){ 
return a + b; 
} 

result = sum(1, 2); // parameters here : 1 corresponds to a, 2 to b 

console.log(result); // prints 3 
0

想通了自己。如果問題不夠清楚,我很抱歉。

這就是我所需要的。

var a = function(a, b) { 
    return function(){ 
     console.log(a + b); 
    } 
}; 

b = a(3, 4); 
b(); 
+1

這是不是正確的解決方案。如果你正在尋找一個currying函數來添加數字,看看這個http://stackoverflow.com/questions/19042221/how-do-you-curry-any-javascript-function-of-arbitrary-arity – nha

+0

@安德雷你能接受我的答案=)? – Gus

+0

@andrey我忘了提及:它可能需要一段時間才能沉入(至少它對我來說),這很正常。不要氣餒,只要把它一件一件地拿出來。 – nha