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新手语法小结
Jun 15 Javascript
风吟的小型JavaScirpt库 (FY.JS).
Mar 09 Javascript
jquery 新手学习常见问题解决方法
Apr 18 Javascript
js 禁用只读文本框获得焦点时的退格键
Apr 25 Javascript
jQueryUI如何自定义组件实现代码
Nov 14 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
跨域解决之JSONP和CORS的详细介绍
Nov 21 Javascript
详解如何在Angular优雅编写HTTP请求
Dec 05 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 Javascript
vue postcss-px2rem 自适应布局
May 15 Vue.js
JS前端使用canvas实现扩展物体类和事件派发
Aug 05 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实现每天自动变换随机问候语的方法
2015/05/12 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python如何重新加载模块
2020/07/29 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
2013/01/30 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
金融学专科生自我鉴定
2014/02/21 职场文书
设计师求职信
2014/07/01 职场文书
生产操作工岗位职责
2014/09/16 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
学校德育工作总结2015
2015/05/11 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android