1 回答
TA贡献1827条经验 获得超9个赞
首先看第一句:var a = fun(0); a.fun(1); a.fun(2); a.fun(3);
a = fun(0)给函数fun传递了第一个参数n,第二个参数o为undefined,所以console.log(o)为undefined。然后函数给a返回了属性fun。
a.fun(1)调用了a的属性fun,传递了第一个参数m,然后调用了函数fun,参数为m,n并返回调用结果。此时m=1,而因为闭包,n的值保留了下来,并作为了调用的函数fun的参数n。所以此时a.fun(1)实际上是return fun(1,0);所以console.log(o)输出值为0;
a.fun(2)和a.fun(3)同理。
第二句:var b = fun(0).fun(1).fun(2).fun(3);
fun(0)此时参数n=0,输出undefined并返回了一个属性,这是属性是fun函数,该fun函数只有一个参数m,
fun(1)即调用该fun函数属性,该属性调用了一个新的fun函数,并返回它的值。该fun函数的参数为m,n,此时m=1,n=0;所以输出0;而它返回的值又返回了一个新的fun属性,此时n=1,o=0;
fun(2)即调用该fun函数属性,该属性调用了一个新的fun函数,并返回它的值。该fun函数的参数为m,n,此时m=2,n=1;所以输出1;而它返回的值又返回了一个新的fun属性,此时n=2,o=1;
fun(3)即调用该fun函数属性,该属性调用了一个新的fun函数,并返回它的值。该fun函数的参数为m,n,此时m=3,n=2;所以输出2;而它返回的值又返回了一个新的fun属性,此时n=3,o=2;
第三句:var c = fun(0).fun(1); c.fun(2); c.fun(3);
c = fun(0).fun(1)输出undefined和0,此时n=1,返回了一个属性,这是属性是fun函数,有一个参数m;
c.fun(2)调用了该属性,此时m=2,该属性返回了一个名为fun的函数的值,这个fun函数的两个参数m=2,n=1,所以输出了1;
c.fun(3)调用了该属性,此时m=3,该属性返回了一个名为fun的函数的值,这个fun函数的两个参数m=3,n=1,所以还是输出了1;
emmm说了这么一大堆绕口令,希望对你有帮助。
添加回答
举报