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)


相关推荐

  • PyCharm 2021.7.16激活码【永久激活】「建议收藏」

    (PyCharm 2021.7.16激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

  • matplotlib用于标注文字的函数_python annotate

    matplotlib用于标注文字的函数_python annotateMatplotlib库标注在工作有很大作用:Annotate的构造函数为:Annotation(s,xy,xytext=None,xycoords=‘data’,textcoords=None,arrowprops=None,annotation_clip=None,**kwargs)用于绘制连接图上两点的箭头。关键参数:s为注释文本内容xy为被注释的坐标点,二维元组形如(…

  • Python RPA 数据库篇6 – MySQL 篇 2 – 增删改查1

    PythonRPA数据库篇6-MySQL篇2-增删改查1pymysql查询数据#!/usr/bin/envPython3#-*-coding:utf-8-*-#@Software:PyCharm#@virtualenv:workon#@contact:1040691703@qq.com#@Desc:Codedescripton__author__=’未昔/AngelFate’__date__=’2019/8/2920:11’imp

  • 如何查看表和索引的统计信息

    如何查看表和索引的统计信息

    2021年11月28日
  • iptables之ipset使用介绍[通俗易懂]

    iptables之ipset使用介绍[通俗易懂]ipset是什么?ipset是iptables的扩展,它允许你创建匹配整个地址集合的规则。而不像普通的iptables链只能单IP匹配,ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,IPsets也具备一些新防火墙设计方法,并简化了配置.官网:http://ipset.netfilt…

  • 用bc做国密sm2加解密、SM3withSM2签名验签等

    用bc做国密sm2加解密、SM3withSM2签名验签等importorg.bouncycastle.asn1.ASN1EncodableVector;importorg.bouncycastle.asn1.ASN1Integer;importorg.bouncycastle.asn1.ASN1Sequence;importorg.bouncycastle.asn1.DERSequence;importorg.bouncycast…

发表回复

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

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