arguments

  arguments.callee (当前函数)

  arguments.callee.caller(调用函数)

  为了我们更好了解这两个属性,我们来举一个小栗子

 1         function getOneNumber(fun1,fun2){
 2            whatNum("1",fun1,fun2);
 3         }
 4 
 5         function getTwoNumber(fun1,fun2){
 6            whatNum("2",fun1,fun2);
 7         }
 8 
 9         function getThreeNumber(fun1,fun2){
10            whatNum("3",fun1,fun2);
11         }
12         
13         function whatNum(num,fun1,fun2){
14             var ids = setTimeout(function(){
15                 console.log(num);
16                 fun1(fun2,arguments.callee.caller);
17                 clearTimeout(ids);
18             },1000);
19         }        
20       
21          function getNumber(fun1,fun2,fun3){
22             fun1(fun2,fun3);
23         }
24 
25         getNumber(getOneNumber,getTwoNumber,getThreeNumber); 
26 
27 
28         // 让 getOneNumber调用  getTwoNumber;
29         // 让  getTwoNumber调用  getThreeNumber;
30         // 让   getThreeNumber 再去调用 getOneNumber;
31   

  这里不要去考虑死循环和堆栈溢出的问题.

 执行结果报出fun1 is not funciton.

 原因是 arguments.callee.caller 为空,稍微调整下代码.bug解除.

 1         function getOneNumber(fun1,fun2){
 2            whatNum("1",fun1,fun2);
 3         }
 4 
 5         function getTwoNumber(fun1,fun2){
 6            whatNum("2",fun1,fun2);
 7         }
 8 
 9         function getThreeNumber(fun1,fun2){
10            whatNum("3",fun1,fun2);
11         }
12         
13         function whatNum(num,fun1,fun2){
14             var f = arguments.callee.caller;
15             var ids = setTimeout(function(){
16                 console.log(num);
17                 fun1(fun2,f);
18                 clearTimeout(ids);
19             },1000);
20         }
21         
22 
23         function getNumber(fun1,fun2,fun3){
24             fun1(fun2,fun3);
25         }
26 
27         getNumber(getOneNumber,getTwoNumber,getThreeNumber);    

 

 将 arguments.callee.caller放在外面就可以了,setTimeout也是个函数,放在里面就找不到调用者函数了.

所以在使用arguments.callee.caller要看清它所在的环境它的调用函数.

 

  这只是一个很low的问题,但为了避免遗忘还是选择贴上代码.

posted @ 2019-12-29 13:45  早点睡觉吧  阅读(203)  评论(0编辑  收藏  举报