我试图理解一个函数如何工作,运行两个括号和两个参数.像这样:
add(10)(10); // returns 20
Run Code Online (Sandbox Code Playgroud)
我知道怎么写一个像这样的两个参数:
function add(a, b) {
return a + b;
}
add(10,10); // returns 20
Run Code Online (Sandbox Code Playgroud)
我怎么能改变这个功能,以便它可以用一组参数或两个参数运行,并产生相同的结果?
任何帮助表示赞赏.直截了当地抓住了我的头.
提前致谢!
T.J*_*der 18
我怎么能改变这个功能,以便它可以用一组参数或两个参数运行,并产生相同的结果?
你几乎可以这样做,但我很难想到一个很好的理由.
方法如下:你检测你的函数接收了多少个参数,如果它只收到一个,你返回一个函数而不是一个数字 - 并且如果它被调用,则将该函数添加到第二个数字中:
function add(a,b) {
if (arguments.length === 1) {
return function(b2) { // You could call this arg `b` as well if you like,
return a + b2; // it would shadow (hide, supercede) the one above
};
}
return a + b;
}
console.log(add(10, 10)); // 20
console.log(add(10)(10)); // 20Run Code Online (Sandbox Code Playgroud)
我之前说" 差不多 "因为add函数只收到一个参数,这并不能保证调用者会调用结果.他们可以写:
var x = add(10);
Run Code Online (Sandbox Code Playgroud)
......永远不要调用x现在引用的函数.
在JavaScript中,函数可以返回函数,因为函数只是另一个对象.一个简单的实现是这样的:
function add(x){
return function addOther(y){
return x + y;
};
}
Run Code Online (Sandbox Code Playgroud)
由于闭包和一阶函数,这是可能的.
这也让你做部分应用,像Ramda这样的库在很大程度上利用了它.
var addThree = add(3)
addThree(5); // 8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5904 次 |
| 最近记录: |