分享一道JS前端闭包面试题

输出以下代码的结果

 1 function fun(n,o){
 2     console.log(o);
 3       return {
 4           fun:function(m){
 5                 return fun(m,n);//[1]
 6             }
 7       }
 8 }
 9 
10 var a=fun(0);
11 a.fun(1);
12 a.fun(2);
13 a.fun(3);
14 var b=fun(0).fun(1).fun(2).fun(3);
15 var c=fun(0).fun(1);
16 c.fun(2);
17 c.fun(3);

解析:

代码转换一下:

 1 function _fun_(n,o){
 2   console.log(o);
 3   return {
 4     fun:function(m){
 5       return _fun_(m,n);
 6     }
 7   }
 8 }
 9 
10 var a=_fun_(0);//undefined
11 a.fun(1);//0
12 a.fun(2);//0
13 a.fun(3);//0
14 
15 var b=_fun_(0).fun(1).fun(2).fun(3);
16 //undefined,0,1,2
17 
18 var c=fun(0).fun(1);//undefined,0,
19 c.fun(2);//1
20 c.fun(3); //1

 

posted @ 2016-03-01 13:37  phil_jing  Views(482)  Comments(0Edit  收藏  举报