封装形如a(1)(2) == a(1,2) 的函数;
1.a(1)(2)
一看就是调用a函数,其后还有一个匿名函数还是要调用,这怎么解释呢?
对于匿名函数的调用其实只需要紧跟匿名函数之后就可以,无需函数名,这样以来就可以说通了:a(1)(2)在最后一次调用是是一个匿名函数,那么函数名a呢?仔细想象:如果函数a返回了匿名函数呢,这个应该是不是就成立了呢?
function a(){
[...arguments]
return function(){
}
}
2.a(1,2)
这个函数可以很好的理解为:
function a(){
[...arguments]
}
3.a(1)(2) == a(1,2)
这个很明显就是此两个函数必须返回相同的结果,至少字面量看起来是数值相等;换句话说,这两个函数表达式执行后均会返回一个值;
4.初步分析
function a(){
return function(){} ;//代码执行到此结束,满足a(1)(2)的形式
return "";//忽略上句代码执行到这里满足a(1,2)的形式
}
//分析结果是无法同时满足,那么可以同时满足的方法只有根据参数arguments分开判断;
function a(){
var args = arguments;
var l = arguments.length;
var int = arguments[0];
if(l==1){
return function( n ){
return int+n
}
}else{
var s = 0;
[...arguments].map(function(arg){
s+=arg;
})
return s
}
}
a(1)(2) == a(1,2) //true