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 相关文章推荐
一页面多XMLHttpRequest对象
Jan 22 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
javascript如何写热点图
Dec 08 Javascript
Web打印解决方案之证件套打的实现思路
Aug 29 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
Jul 09 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
Nov 27 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php minixml详解
2008/07/19 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python 提取文件指定列的方法示例
2019/08/07 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
Python与C/C++的相互调用案例
2021/03/04 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
银行开业庆典方案
2014/02/06 职场文书
创业资金计划书
2014/02/06 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
安全员岗位职责范本
2015/04/11 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS