javascript中callee与caller的区别分析


Posted in Javascript onApril 20, 2015

callee

callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数
首先我们来写个阶成函数:

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};

从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试

function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};

我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。

caller

caller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)

先来个例子吧

function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容

我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};

那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢

function b(){
alert(b.caller);
};

从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b
前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:

(function a(){
b();
})();

function b(){
alert(arguments.callee.caller);
};

从代码中可以看出我们用arguments.callee代替了b函数,所以解决了一下麻烦。。。。。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
May 24 Javascript
js页面跳转的常用方法整理
Oct 18 Javascript
Jquery 动态循环输出表格具体方法
Nov 23 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
JavaScript组合模式学习要点
Aug 26 Javascript
Angularjs手动解析表达式($parse)
Oct 12 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
利用Vue构造器创建Form组件的通用解决方法
Dec 03 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
小程序实现锚点滑动效果
Sep 23 Javascript
javascript正则表达式中的replace方法详解
Apr 20 #Javascript
javascript正则表达式基础知识入门
Apr 20 #Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 #Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 #Javascript
JS解析XML文件和XML字符串详解
Apr 17 #Javascript
JS设置cookie、读取cookie、删除cookie
Apr 17 #Javascript
js获取当前日期时间及其它操作汇总
Apr 17 #Javascript
You might like
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
JQuery 常用操作代码
2010/03/14 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
jquery $.ajax相关用法分享
2012/03/16 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
vue实现选中效果
2020/10/07 Javascript
python time模块用法实例详解
2014/09/11 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
python实现石头剪刀布小游戏
2021/01/20 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
shell的种类有哪些
2015/04/15 面试题
2015年技术员工作总结
2015/04/10 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
2016年校长新年寄语
2015/08/17 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS