callee和caller属性的区别
在函数内部,有两个特殊的对象:arguments和this 。arguments是一个类数组对象,用于存放传入函数中的所有参数。
callee是arguments对象的属性,caller是所有函数对象的属性。
callee
callee是一个指针,指向拥有当前arguments对象的函数,即返回正在执行的函数本身的引用。
使用callee时要注意:
1 这个属性只有在函数执行时才有效
2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length(实参长度)是否等于arguments.callee.length(形参长度)
3 它可以用来递归匿名函数或者保证函数的封装性。
//callee可以打印其本身
function calleeDemo() {
alert(arguments.callee);
}
//用于验证参数
function calleeLengthDemo(arg1, arg2) {
if (arguments.length == arguments.callee.length) {
window.alert("验证形参和实参长度正确!");
return;
} else {
alert("实参长度:" + arguments.length);
alert("形参长度: " + arguments.callee.length);
}
}
//递归计算
var sum = function (n) {
if (n < = 0)
return 1;
else
return n +arguments.callee(n - 1)
}
举个例子
var a = function() {
alert(arguments.callee);
}
var b = function() {
a();
}
b(); //function() { alert(arguments.callee); }
a在b中被调用,但是它返回了a本身的引用。
caller
caller返回一个对函数的引用,该函数调用了当前函数。即这个属性中保存着调用当前函数的函数的引用。
使用这个属性要注意:
1 这个属性只有当函数在执行时才有用
2 如果在JavaScript程序中,函数是由顶层调用的,则返回null
functionName.caller: functionName是当前正在执行的函数。
举个例子
var a = function() {
alert(a.caller);
}
var b = function() {
a();
}
b(); // function() { a(); }
a(); // null
上面的代码中,b调用了a,那么a.caller返回的是b的引用。
但是,如果直接调用a(即a在任何函数中被调用,也就是顶层调用),返回null。
callee和caller属性的区别的更多相关文章
- 函数中的this与argument对象,以及argument中的callee与caller属性
相关阅读:https://segmentfault.com/a/1190000015438195 相关阅读: https://zhuanlan.zhihu.com/p/23804247 相关阅读: h ...
- js apply/call/caller/callee/bind使用方法与区别分析
一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). Js代码 call([thisObj[,arg1[, arg2[, ...
- caller 属性和callee属性
1.caller 属性 返回一个对函数的引用,即调用了当前函数的函数体. functionName.caller :functionName 对象是所执行函数的名称. 说明: 对于函数来说,calle ...
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法
函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...
- js中的caller属性和callee属性
应该用"属性"来称呼caller和callee,而不是方法. caller:返回调用当前函数的函数的引用.a调用b,则返回a(a是boss,因为a把b叫过去干活了): callee ...
- Javascript arguments.callee和caller的区别
一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函数和调用它的函数的参数. 语法: 1 [function.]argument ...
- arguments对象的callee属性和caller属性
js中的arguments对象代表正在执行的函数和调用它的函数的参数.arguments对象有两个属性,callee和caller.collee表示当前正在执行的方法,caller表示调用该方法的对象 ...
- JavaScript中的callee与caller的区别
1.callee callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数 作用:就是用来指向当前对象 返回正被执行的 Function 对象,也就是所指定的 Functi ...
- js经验点滴js apply/call/caller/callee/bind使用方法与区别分析
一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). Js代码 call([thisObj[,arg1[, arg2[, ...
随机推荐
- 在Linux中使用selenium(环境部署)
1.安装chrome 用下面的命令安装Google Chrome yum install https://dl.google.com/linux/direct/google-chrome-stable ...
- dom4j处理带命名空间的XML-使用XPath(转)
dom4j处理带命名空间的XML-使用XPath 博客分类: XML XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 使 ...
- zimage 和bzimage 有什么区别
在网络中,不少服务器采用的是Linux系统.为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核.编译Linux 内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的 ...
- 官网下载eclipse
百度搜索eclipse,点击官网链接进入官网 进入官网点击Download Packages 根据自己需要选择对应的版本 选择对应的版本进入下图下载页面,然后点击下载即可 下载完成,解压zip包即可使 ...
- [编织消息框架][JAVA核心技术]动态代理应用4-annotationProcessor
基础部份: 接下来讲编译JAVA时,生成自定义class 我们用 javax.annotation.processing.AbstractProcessor 来处理 public abstract c ...
- 基于 Kubernetes 实践弹性的 CI/CD 系统
大家好,我是来自阿里云容器服务团队的华相.首先简单解释一下何为 Kubernetes 来帮助大家理解.Kuberentes 是一个生产可用的容器编排系统.Kuberentes 一方面在集群中把所有 N ...
- 大牛就别进来了.npm --save-dev --save 的区别
--save-dev 是你开发时候依赖的东西,--save 是你发布之后还依赖的东西. 比如,你写 ES6 代码,如果你想编译成 ES5 发布那么 babel 就是devDependencies.如果 ...
- PAT甲级——A1057 Stack
Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...
- Python基础-列表、元组、字典、字符串(精简解析),全网最齐全。
一.列表 =====================================================1.列表的定义及格式: 列表是个有序的,可修改的,元素用逗号隔开,用中括号包围的序列 ...
- eureka注册中心设置用户名密码
1.加入安全认证依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...