上一篇文章談論了閉包的概念和一些應用,並給出一個例題,這篇文章就此道例題進行討論。
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);
問:三行a,b,c的輸出分別是什麼?
首先來看第一行
var a = fun(0);undefined;a.fun(1);fun(0, undefined).fun(1);a.fun(1)返回的就是fun(m, n);fun(1, 0);因此打印的值為0,;a.fun(2);fun(2, 0),依然打印0;a.fun(3);fun(3, 0),依然打印0;undefined,0,0,0第二行
var b = fun(0)undefined;.fun(1)fun(1, 0), 打印0;.fun(2).fun(2),弄明白了上面,你一定知道這一步應該返回的是fun(2, 1);因為此時在內存中的n是1;所以打印值為1;.fun(3)2,即fun(3, 2);打印2;undefined,0,1,2第三行就是一二行的結合,如果弄懂了上面兩行,第三行不過是一個驗證的過程。也就不在多說。
輸出為 undefined,0,1,1