问题:
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);//undefined,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?
答案:
//答案: //a: undefined,0,0,0 //b: undefined,0,1,2 //c: undefined,0,1,1
看了挺久,似懂非懂,无法理出正确清晰的解释思路,求大牛解答。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
感觉原 po 说的很详细了啊 http://www.cnblogs.com/xxcang...
我晕,居然发现我也写过题解 ... http://www.cnblogs.com/zichi/...
谢邀,这问题其实不难理解吧,觉得太深入的话,建议草稿写起来。
首先看
a = fun(0),此时输出的是undefined,这个假设题主是知道的, 此时a其实就是一个对象:所以啊后面的a.fun(x)其实都是在调用对象里面的fun方法,而fun方法还是调用外面那个声明的fun函数,但是我们不需要理解太深,只要知道 fun(x,y)的时候 ,会输出y 即可 ,所以啊,这里a.fun 都是输出 0;
那么我们先跳过b先看c,在我们刚才理解a.fun的基础上,它这里其实就相当于
我们知道刚才a实际上就是一个对象,包含fun方法,现在是要调用a.fun然后返回一个新的对象了
我们想一下调用a.fun(1)的时候,其实返回的是
return fun(1, 0);这个时候我们忘记a,看一下fun函数是怎么执行fun(1,0)的,是不是输出1,然后返回一个新的对象,然后赋值给了c了。如下
这个时候我们按照前面a.fun方法调用的方式,其实这时候c.fun(z),就是都输出1了。
这时候相信我们掌握了一个规律,实际上就是我们只要知道最后一层fun函数调用的参数n,就知道最后输出的是啥了。
于是我们简化一下b,结合a跟c的例子
我们知道c.fun()是输出 1的,以此类推, c.fun(2).fun(3)应该输出的是2 ~
ps: 实际写代码好像没遇到过这种
看起来好像听绕的样子,其实把第二句翻译一下就完了。
关键字是 柯里化