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的用法的主要内容,如果未能解决你的问题,请参考以下文章
二——01Day:对象的索引理解,对象上的this指向,对象转换为字符串,函数的预解析,arguments.callee的用法,