关于闭包的一道题目解析
function fun(a, b) {
console.log('b:', b)
return {
fun: function (m) {
return fun(m, a)
}
}
}
const c = fun(0);
console.log('c.fun(1) = ' + c.fun(1));
console.log('c.fun(2) = ' + c.fun(2));
console.log('c.fun(3) = ' + c.fun(3));
console.log('c.fun(1).fun(2).fun(3) = ' + c.fun(1).fun(2).fun(3));
/* 共同部分:const c = fun(0);
执行:const c = fun(0);
参数变换: a = 0, b = undefined,
结果:b=undefined(打印), c = {fun: function(m){return fun(m, 0)}}
*/
/**c.fun(1)的解题过程:
执行:c.fun(1)
参数变换:m=1,a=0, a=1,b=0,
结果 b:0(打印), c.fun(1) = {fun: function (m) {return fun(m, 1)}}(打印)
*/
/**c.fun(2)的解题过程:
执行:c.fun(2)
参数变换:m=2,a=0, a=2,b=0,
结果 b:0(打印), c.fun(1) = {fun: function (m) {return fun(m, 2)}}(打印)
*/
/**c.fun(3)的解题过程:
执行:c.fun(3)
参数变换:m=3,a=0, a=3,b=0,
结果 b:0(打印), c.fun(1) = {fun: function (m) {return fun(m, 3)}}(打印)
*/
/* c.fun(1).fun(2).fun(3)的解题过程:
执行:c.fun(1)
参数变换:m=1,a=0, a=1,b=0,
结果 b:0(打印), c.fun(1) = {fun: function (m) {return fun(m, 1)}}
执行:c.fun(1).fun(2)
参数变换:m=2,a=1, a=2,b=1,
结果 b:1(打印), c.fun(1).fun(2) = {fun: function (m) {return fun(m, 2)}}
执行:c.fun(1).fun(2).fun(3)
参数变换:m=3,a=2, a=3,b=2,
结果 b:2(打印), c.fun(1).fun(2).fun(3) = function (m) {return fun(m, 3)}(打印)
*/

浙公网安备 33010602011771号