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的用法相关推荐
- javaScript中递归和arguments.callee
现在已经不推荐使用arguments.callee(): 原因:访问arguments是个很昂贵的操作,因为它是个很大的对象,每次递归调用时都需要重新创建.影响现代浏览器的性能,还会影响闭包. 但是, ...
- JavaScript中的arguments,callee,caller
2019独角兽企业重金招聘Python工程师标准>>> arguments: arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]argumen ...
- 【转】全面理解javascript的arguments,callee,caller,call,apply概念(修改版)
(注:在看到大家如此关注JS里头的这几个对象,我试着把原文再修改一下,力求能再详细的阐明个中意义 2007-05-21) 在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arg ...
- js的隐含参数(arguments,callee,caller)使用方法
本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在提到上述的概念之前,首先想说说javascript中 ...
- JavaScript中的arguments,callee,caller,call,appy
代码 <script language="JavaScript"> /* * 演示arguments的用法,如何获取实参数和形数数 */ function argTes ...
- arguments.callee()
arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函数,没有名子,无名可调. 这时就可以用argumen ...
- 小tips:JS严格模式(use strict)下不能使用arguments.callee的替代方案
在函数内部,有两个特殊的对象:arguments 和 this.其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 a ...
- arguments.callee查询调用b函数的是哪个函数
// function functionname(){// function b(){// console.log(arguments.callee.caller.name);// }// b();/ ...
- html5斐波那契数列,经典的斐波那契数列与arguments.callee
经典的斐波那契数列与arguments.callee HTML5学堂:提到斐波那契数列,很多人还不是太清楚,但是如果提到兔子繁殖这个经典题目,相信学过计算机语言的人们会立刻感觉"亲切&quo ...
最新文章
- 4702: 分糖果系列一
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)
- 手把手教你部署VSAN见证虚拟设备 (Cormac)
- Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令
- 前端学习(3198):jsx语法规则2
- Android学习笔记(24):进度条组件ProgressBar及其子类
- day03【后台】管理员维护
- 使用mysqldump进行逻辑备份
- eclipse java 生成api_怎样使用Eclipse在Java中实现自己的API
- OpenCV-闭运算(CLOSE)
- 优雅的使用Python之软件管理
- 2000w mysql_MySQL数据库优化(基于酒店2000w条数据)
- 算法竞赛入门经典 电子书(附习题解析)网盘下载
- 分销体系的概念、模式及体系搭建
- MetaMask10.6.1点击切换本地网络LocalHost:8545没反应
- 配置有误:由于权限不足而无法读取配置文件
- fcitx输入法代码分析总结
- 应用“真心话大冒险”项目总结
- 第十二期 U-Boot工作原理 《路由器就是开发板》
- Debian/Ubuntu修改最大文件连接数ulimit -SHn的坑