5 回答
TA贡献1785条经验 获得超4个赞
var a = fun(0).fun(1);
//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}},对象里的n指向0
//接下来执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并把{fun:function(m){return fun(m,n);}}赋值给a(此时n指向1)
//记住 a = {fun:function(m){return fun(m,n);}} (此时n指向1)
a.fun(2);
//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}},没有接收方
a.fun(3);
//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(3,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}},没有接收方
var b =fun(0).fun(1).fun(2).fun(3);
//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}},对象里的n指向0
//接下来执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}} (此时n指向1)
//接下来执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}} (此时n指向2)
//接下来执行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,2)的运行结果,即打印2,并返回{fun:function(m){return fun(m,n);}}赋值给b (此时n指向3)
var c =fun(0);
//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}}赋值给c,对象里的n指向0
c.fun(1);
//这里执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方
c.fun(2);
//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方
c.fun(3);
//这里执行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方
TA贡献1810条经验 获得超4个赞
第一个:var a = fun(0).fun(1);相当于执行外面的fun(n,o)函数,因为o没有传参,所以console.log(o)为undefined,然后
return {
fun:function(m){
return fun(m,n);
}
}
的意思就是将里面的fun:function(m)赋值给fun(0),然后在则行他,相当于则行fun(m,n),最后结果赋值给a
var a = fun(0).fun(1);
a.fun(2);
a.fun(3); 的完整流程:
fun(0) == fun(n,o){
//这里o没传参,所以值为undefined
console.log(o); o = undefined
return fun:function(m){ //到了这一步,就相当于 fun() = fun:function(m){return
fun(m,n);}
return fun(m,n); n = 1 //接受上面的参数,为1
}
}
然后fun(0).fun(1) 就相当于执行了 刚刚return会来的函数 fun(m,1),又回到最外层的函数,以此类推
输出结果为:undefined,0,1,1
语言组织能力一般,请见谅
TA贡献1788条经验 获得超4个赞
function fun(n,o){ //fun一
console.log(o);
return {
fun:function(m){ //fun二
return fun(m,n); //fun三
}
}
}
首先要弄清楚这里的三个fun到底是指的什么
fun一:一个全局的函数,返回值是一个对象obj
fun二:是返回对象obj里面的一个键(key),这个键对应的是一个匿名函数
fun三:调用的fun一
从最开始理解var a = fun(0).fun(1);
最先执行的是fun(0)这个时候没有第二个参数o,所以为undefined。
这个时候fun(0)返回了一个对象:
{
fun:function(m){
return fun(m,0);
}
}
var a = fun(0).fun(1);
//这时候再把1带入就是
var a = function(1){ return fun(1,0)};
//其实就是
var a = fun(1,0); //这个时候o为0 ----打印为0
//返回的对象为
{
fun:function(m){
return fun(m,1);
}
}
a.fun(2); //也就是 fun(2,1) ----打印为1
a.fun(3); //也就是 fun(3,1) ----打印为1
//a一系列的打印下来 undefined 0 1 1
后面的B和C像这样一部一部的推即可
添加回答
举报