码迷,mamicode.com
首页 > 其他好文 > 详细

arguments

时间:2019-12-29 14:48:48      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:div   堆栈   settime   call   UNC   避免   bug   堆栈溢出   out   

这里只介绍关于

  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解除.

 

        function getOneNumber(fun1,fun2){
           whatNum("1",fun1,fun2);
        }

        function getTwoNumber(fun1,fun2){
           whatNum("2",fun1,fun2);
        }

        function getThreeNumber(fun1,fun2){
           whatNum("3",fun1,fun2);
        }
        
        function whatNum(num,fun1,fun2){
            var f = arguments.callee.caller;
            var ids = setTimeout(function(){
                console.log(num);
                fun1(fun2,f);
                clearTimeout(ids);
            },1000);
        }
        

        function getNumber(fun1,fun2,fun3){
            fun1(fun2,fun3);
        }

        getNumber(getOneNumber,getTwoNumber,getThreeNumber);        

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

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

 

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

arguments

标签:div   堆栈   settime   call   UNC   避免   bug   堆栈溢出   out   

原文地址:https://www.cnblogs.com/wangjingzhi/p/12114852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!