回答
在這種情況下,你是假設功能(1)返回一個函數,比你在呼喚與2
參數,這種新的,匿名函數看到這個例子:
function sum(a) {
return function(b) {
return a+b;
}
}
// Usage:
window.alert(sum(5)(3)); // shows 8
var add2 = sum(2);
window.alert(add2(5)); // shows 7
window.alert(typeof(add2)); // shows 'function'
這裏我們創建一個函數sum
,它需要一個參數。在函數sum
的內部,我們創建了一個,它接受另一個參數。這個匿名函數是作爲執行sum
的結果而返回的。
請注意,這個匿名函數是一個很好的例子,我們稱之爲closure。閉包是一個函數,它保持創建它的上下文。在這種情況下,它將保留變量a
的值,如示例函數add2
。如果我們創造了許多倒閉,他們是獨立的,你可以看到:
var add3 = sum(3);
var add4 = sum(4);
window.alert(add3(3)); // shows 6
window.alert(add4(3)); // shows 7
此外,他們不會得到「混亂」,如果你也有類似的命名局部變量:
var a = "Hello, world";
function multiply(a) {
return function(b) {
return a * b;
}
}
window.alert(multiply(6)(7)); // shows 42
var twoTimes = multiply(2);
window.alert(typeof(twoTimes));
window.alert(twoTimes(5));
所以,經過致電sum(2)
或multiply(2)
結果不是數字,也不是字符串,而是function
。這是functional languages的一個特性 - 可以將函數作爲參數傳遞並作爲其他函數的結果返回的語言。
如果你的函數返回一個函數,你也可以調用它。
x = f(1)(2)
等同於:
f2 = f(1)
x = f2(2)
括號表示函數的調用(你 「呼」 的話)。如果您有
<anything>()
這意味着anything
的值是一個可調用的值。想象一下以下功能:
function add(n1) {
return function add_second(n2) {
return n1+n2
}
}
然後,您可以調用它爲add(1)(2)
這將等於3.您可以自然地擴展這個就像你想要的。
沒有必要給一個名稱函數返回,順便說一句。 '返回函數(n2)'同樣好,輸入也少。 – 2009-11-22 06:40:31
我知道。我覺得也許最好不要通過使用匿名函數來混淆手頭的問題。 – Svend 2009-11-22 12:31:39
您必須返回一個函數的函數:
function f(n) {
return function(x) {
return n + x;
};
}
當你調用F(1)你到一個函數的引用回來。您可以參考存儲在一個變量,並調用它:
var fx = f(1);
var result = fx(2);
或者你也可以直接調用它:
var result = f(1)(2);
爲了得到一個返回返回返回函數的函數功能的功能,你只需要重複這個過程:
function f(n) {
return function(x) {
return function(y) {
return function(z) {
return n + x + y + z;
}
}
};
}
對downvote好奇嗎?如果你不解釋你不喜歡的是什麼,那是毫無意義的...... – Guffa 2009-11-21 18:36:42
- 1. 在Scala中使用部分函數 - 它是如何工作的?
- 2. 使用||或&&中的strcmp()函數,它是如何工作
- 3. Javascript「err」函數參數 - 它是如何工作的?
- 4. 它是如何工作的「$ _&1」perl
- 5. HREF =「JavaScript的:?()的函數,它是如何工作的
- 6. &1 JavaScript。它是如何工作的?聰明還是好?
- 7. 如何在函數-2中使用jquery函數-1變量值?
- 8. MVC 2 UpdateModel - 它是如何工作的?
- 9. javascript描述中的javascript函數是如何工作的?
- 10. Javascript代碼:它是如何工作的?
- 11. 在存儲在工作表1中的VB函數中使用工作表2
- 12. 角2 Renderer2 - 它是如何工作
- 13. behaviourSubject在angular2,它是如何工作以及如何使用它
- 14. 如何在R中的函數2中使用函數1的輸出?
- 15. 函數中的兩個參數是什麼?它如何工作?
- 16. 空函數聲明如何在JavaScript中使用吊裝工作?
- 17. where子句中的MySQL min函數,它是如何工作的?
- 18. 如何使數組在javascript中工作
- 19. 如何1 = 2 = 3然後(...)的工作
- 20. Animate.css - 它是如何工作的?如何使其自動工作?
- 21. 函數作用域如何在JavaScript中工作?
- 22. 。它是如何工作的?
- 23. 在JavaScript中的原型繼承,它是如何工作的?
- 24. 在javascript中的document.write,它是如何工作的?
- 25. JavaScript函數在函數內部自我重寫它如何在後臺工作?
- 26. 什麼是.xts構造函數/它是如何工作的?
- 27. 函數的參數以及它們是如何工作
- 28. typeof()參數 - 它是如何工作的?
- 29. JavaScript函數如何調用原型函數name.argument的工作?
- 30. [n&1]和[n%2]如何工作?
+1偉大的鏈接,關閉 – bguiz 2009-11-21 13:33:18