arguments.callee的用法

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arguments.callee的用法相关的知识,希望对你有一定的参考价值。

argument为函数内部对象,包含传入函数的所有参数,arguments.callee代表函数名,多用于递归调用,防止函数执行与函数名紧紧耦合的现象,对于没有函数名的匿名函数也非常起作用。举例如下:

function factorial(num)
      if(num<=1)
          return 1;
      else
          return num*arguments.callee(num-1);  //arguments.callee代表factorial
      

var trueFactorial = factorial;
factorial = function()
	  return 0;

alert(trueFactorial(5)); //结果为120,因为js中函数没有重载,所以如果递归调用时使用函数名,则执行最后一个该函数名的函数,即返回0
alert(factorial(5));//结果为0

匿名函数的递归:

var num = (function(num)
      if(num<=1)
          return 1;
      else
          return num*arguments.callee(num-1);
      
 )(5);
  alert(num); //结果为120

红绿灯异步输出

function showRed(fn1, fn2)
    var f = arguments.callee; //函数本身
    //arguments.callee 执行该函数的上下文执行环境,指向调用他的对象
    setTimeout(function()
        console.log("红灯");
        fn1(fn2, f);
    , 2000);   


function showYellow(fn1, fn2)
    var f = arguments.callee;
    setTimeout(function()
        console.log("黄灯");
        fn1(fn2, f);
    , 1000);
    


function showGreen(fn1, fn2)
    var f = arguments.callee;
    setTimeout(function()
        console.log("绿灯");
        fn1(fn2, f);
    , 3000);


showRed(showYellow, showGreen);

以上是关于arguments.callee的用法的主要内容,如果未能解决你的问题,请参考以下文章

arguments.callee 调用函数自身用法

arguments.callee的用法

arguments.callee的用法

STM32F103R6红灯闪并报警,绿灯亮不报警

callee(),call(),apply()方法的使用

二——01Day:对象的索引理解,对象上的this指向,对象转换为字符串,函数的预解析,arguments.callee的用法,