有什么区别:
// Example 1 sum(8,2)
console.log(sum(8,2)); // Outputs what??
// Example 2 sum(8)(2)
console.log(sum(8)(2)); // Outputs what??
function sum(x,y) {
return x+y;
}
function sum(x) {
return function(y){
return x+y;
}
}
为什么一个用于另一个以及为什么?
答案 0 :(得分:3)
您要做的是Function Currying
试试这个:
function sum(x) {
return function(y) { return x + y; }
};
var sumWith4 = sum(4);
var finalVal = sumWith4(5);
finalVal = sumWith4(8);
其中一个优点是它有助于重用抽象函数。例如,在上面的示例中,我可以重复使用sumWith4将4添加到任何数字,而不显式调用sum(4,5)。这是一个非常简单的例子。有些情况下,部分功能将根据第一个参数进行评估,而另一部分则根据第二个参数进行评估。因此,您可以通过为其提供第一个参数来创建部分函数,然后针对多个不同的第二个参数重复使用部分函数。
答案 1 :(得分:0)
我将假设你的意思是要求调用函数的区别,如: -
使用 Closures 会发生这种情况,这恰好是一个内部功能可以承载创建它的环境的概念。
var sum = function (x){
return function(y) {
return x+y;
};
};
var addWith5 = sum(5);
/*
This will return a function and not a value
addWith5 = function(y){return 5+y;};
*/
console.log(addWith5(5)); // this will return 11
/*
You can also use add function directly
*/
console.log(sum(5)(6)); // this will return 11
/*
The function returned by sum(5), gets called with the parameter (6)
*/
//Try using this, to make it more clear
function a(x){
return x;
}(5);
// returns 5
修改强> 删除了“闭包是一个JS概念。”