![](/img/trans.png)
[英]Prevent loss of context for 'this' variable in a function passed as a parameter
[英]Add multiple variable passed as parameter to function currying
如何使用函數柯里化來實現這些場景?
add(3,4)(3)
add(3)(4)(3)
add(3)(4,3)
我讀了很多博客都找不到這種場景。 有人可以幫我解決這個問題嗎?
像這樣的東西?
var total = 0; function add(){ // Add up every argument received for (var i in arguments) total += arguments[i]; return add; } add(3,4)(3); console.log(total); add(3)(4)(3); console.log(total); add(3)(4,3); console.log(total);
如果不希望函數依賴於全局變量,則將該值保存為add
函數的屬性
function add(){ // Add up every argument received for (var i in arguments) add.total += arguments[i]; return add; } add.total = 0; add.toString = function(){ var total = add.total; add.total = 0; return total; }; var sum1 = add(3,4)(3); alert( sum1 ); var sum2 = add(3)(4)(3); alert( sum2 ); var sum3 = add(3)(4,3); alert( sum3 );
我在這里看到兩個柯里化場景:
1.
add(3,4)(3)
add(3)(4,3)
和
2.
add(3)(4)(3)
您可以使用的第一個地址:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return args1.concat(args2).reduce(function(a, i) { return a + i });
}
}
第二個:
function add() {
const args1 = Array.prototype.slice.call(arguments);
return function() {
const args2 = Array.prototype.slice.call(arguments);
return function() {
const args3 = Array.prototype.slice.call(arguments);
return args1.concat(args2).concat(args3).reduce(function(a, i) { return a + i });
}
}
}
我沒有找到具有同時處理兩者的功能的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.