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 相关文章推荐
使用javascript访问XML数据的实例
Dec 27 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
json与jsonp知识小结(推荐)
Aug 16 Javascript
深入理解jQuery3.0的domManip函数
Sep 01 Javascript
AnjularJS中$scope和$rootScope的区别小结
Sep 18 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
vuejs 动态添加input框的实例讲解
Aug 24 Javascript
利用vue.js把静态json绑定bootstrap的table方法
Aug 28 Javascript
js 对象使用的小技巧实例分析
Nov 08 Javascript
React实现轮播效果
Aug 25 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
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
DWZ刷新dialog解决方法
2013/03/03 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
python实现字符串和数字拼接
2020/03/02 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
授权委托书范本(单位)
2014/09/28 职场文书
通知的写法
2015/04/23 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
倡议书怎么写?
2019/04/11 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
Python Matplotlib绘制动画的代码详解
2022/05/30 Python