java caller_callee和caller属性的区别[通俗易懂]

java caller_callee和caller属性的区别[通俗易懂]在函数内部,有两个特殊的对象:arguments和this。arguments是一个类数组对象,用于存放传入函数中的所有参数。callee是arguments对象的属性,caller是所有函数对象的属性。calleecallee是一个指针,指向拥有当前arguments对象的函数,即返回正在执行的函数本身的引用。使用callee时要注意:1这个属性只有在函数执行时才有效2它有一个length…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

在函数内部,有两个特殊的对象:arguments和this 。arguments是一个类数组对象,用于存放传入函数中的所有参数。

callee是arguments对象的属性,caller是所有函数对象的属性。

callee

callee是一个指针,指向拥有当前arguments对象的函数,即返回正在执行的函数本身的引用。

使用callee时要注意:

1 这个属性只有在函数执行时才有效

2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length(实参长度)是否等于arguments.callee.length(形参长度)

3 它可以用来递归匿名函数或者保证函数的封装性。

//callee可以打印其本身

functioncalleeDemo() {

alert(arguments.callee);

}//用于验证参数

functioncalleeLengthDemo(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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/222949.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号