function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n)
}
}
}
var a = fun(0)
a.fun(1)
a.fun(2)
a.fun(3)
var b = fun(0).fun(1).fun(2).fun(3)
var c = fun(0).fun(1)
c.fun(2)
c.fun(3)
首先声明的一个函数fun,返回结果为对象
{
fun:function(m){
return fun(m,n)
}
}
需要注意的是,上述函数定义了三个形参:m,n,o
var a = fun(0),入参只传了一个0,赋值给了第一个形参n,而o并未赋值,因此此处会打印出undefined
此时a = {fun:function(m){return fun(m,0)}}
a.fun(1)则相当于调用function(1){return fun(1,0)},因此此处会打印0
同理a.fun(2)相当于调用function(2){return fun(2,0)},a.fun(3)=>function(3){return fun(3,0)},此处同样会打印0
var b = fun(0).fun(1).fun(2).fun(3)这个就需要分开来看了
fun(0) => {fun:function(m){ return fun(m,0)}} // undefined
fun(0).fun(1) => fun(1,0) => {fun:function(m){return fun(m,1)}} // 0
fun(0).fun(1).fun(2) => fun(2,1) => {fun:function(m){return fun(m,2)}} // 1
//fun(0).fun(1).fun(2).fun(3) = fun(3,2) // 2
var c = fun(0).fun(1)同b,会打印undefined,0
此时,c = {fun:function(m){return fun(m,1)}}
因此c.fun(2)和c.fun(3)调用的结果都是会打印1