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。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java redis 配置文件_redis配置文件详解(生产环境配置)

    java redis 配置文件_redis配置文件详解(生产环境配置)#当本机为从服务时,设置主服务的连接密码#masterauth#当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能:#1)如果slave-serve-stale-data设置为”yes”(默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。#2)如果slave-serve-stale-data设置为…

    2022年6月11日
    70
  • 软件测试前景和发展方向

    软件测试前景和发展方向2019最热门的软件测试趋势毛哥(译)放眼全球,了解技术发展的边界和趋势,有助于组织和个人的发展及竞争力的提升,偶尔看到国外某网站的一篇文章,读来颇值得参考,简单翻译过来,分享一下。也许这篇文章会给你一份指南,让你快速成长与发展。如今,随着世界数字化,我们目睹了技术进步的巨大变化。2019年也将标志着技术和数字化转型的巨大变化,从而要求组织不断创新和重塑自我。#1)敏捷与D…

    2022年4月28日
    73
  • 时间控件(选择时间范围的插件)「建议收藏」

    时间控件(选择时间范围的插件)「建议收藏」后台开发,一般都是有筛选条件的查询,那么问题就来了,根据日期范围搜索的情况下,插件要怎么选????Laydate时间控件这个是最开始,我采用的是两个时间插件,其他也没啥,就是运营部门使用起来可能感觉太麻烦,为啥不能一次让我选了,还有说老是忘记选择结束时间,然后就有了我接下来的工作。。。在此,给大家推荐一款很好使用的日期与时间组件…

    2022年5月10日
    41
  • 分布式文件存储系统的优点和缺点

    分布式文件存储系统的优点和缺点分布式文件存储系统分布式:在hdfs中由多个服务器组成,每个服务器扮演着不同的角色HDFS适用于一次写入多次读出,不支持文件修改优点1高容错性一台宕机没有什么问题,不会造成一个数据整体丢失。丢失的部分数据丢失会很快从其他节点拉取并回复。2合存储大数据量的文件数量级GBTBPB都支持件规模适合存储百万规模的数据3硬件价格低廉可以使用廉价的物理机缺点1不适合存储小文件这个面试也可能会被问到,请重点理解造成namenode的元数据储存信息比较多文件过多会导致寻址时间较长,组

    2022年6月8日
    130
  • DM368开发 –IPNC 设置过程[通俗易懂]

    DM368开发 –IPNC 设置过程[通俗易懂]第一步: IPNC 安装:安装软件包,解压后包含以下组件:1. IPNC_RDK_DM36x_Version3.1.0.tar.gz:这是linux tar文件,需要解压在linux机器。这是主要tar文件IPNC RDK安装。这个包含在以下文件 预构建二进制文件Dm36x平台 配套文献 源代码构建IPNC的RDK所需 硬件包和BoM,图表和Gerber文件        实用程序文件像凝

    2022年8月13日
    6
  • java做服务器,android做客户端,实现数据传输

    许久未动笔,有个小项目开始动工。需要用一台windows电脑做服务器,在android端与其进行数据交换,实现一些业务。简单起见,用java写这个服务器,以前没做过,试试水。很简单的代码,纯粹找思路。服务器端代码:package com.test;import java.io.IOException;import java.io.OutputStream;impor

    2022年3月11日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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