arguments.callee和caller的区别

1、arguments

arguments 是一个对应于传递给函数的参数的类数组对象。 白话就是这是一个函数的传参的集合,不是数组,但是是一个类数组

function func() {console.log(arguments)console.log(arguments instanceof Array)console.log(arguments instanceof Object)
}func(3,'Hello');

如上图,打印出arguments,有length属性,但是arguments不是Array的实例对象,是Object,有Array的部分属性却不是Array的实例对象,所以叫他类数组。

2、arguments.callee

上述截图打印arguments存在callee

function func() {console.log(arguments.callee)
}func(3,'Hello');

由上面的打印可以看出arguments.callee是一个指针,指向拥有arguments对象的函数本身。

这个arguments.callee那里用呢,如下:

function fac(num){if(num <= 1){ //0的阶乘也是1return 1;}else{return num*fac(num-1);}
}
var temp = fac;
fac = function(num){return 0;
};console.log(temp(8)); // 打印结果为0

上面fac已经发生改变,所以调用fac之后永远返回0,使用arguments.callee之后,如下:

function fac(num){if(num <= 1){ //0的阶乘也是1return 1;}else{return num*arguments.callee(num-1);}
}
var temp = fac;
fac = function(num){return 0;
};console.log(temp(8)); // 40320

就是说这里有个耦合度的问题,使用arguments.callee解耦。

但是最最最重要的一点,在严格模式下,arguments.callee是报错的,如下:

 'use strict'
function fac(num) {if (num <= 1) { //0的阶乘也是1return 1;}else {return num * arguments.callee(num - 1);}
}
var temp = fac;
fac = function (num) {return 0;
};
console.log(temp);
console.log(fac);
console.log(temp(10));

3、caller

caller跟arguments没关系,只是说caller跟arguments的callee长得像而已,caller保存着调用当前函数的函数应用,什么意思呢:

function parent() {child();
}
function child() {console.log(child.caller)
}parent();

谁调用child呢,parent调用,所以console.log(child.caller)为parent这个函数。如果改成如下:

function child() {console.log(child.caller)
}child()


自我调用,没有别的调用,显示null

arguments.callee和caller的区别相关推荐

  1. callee与caller的区别

    Javascript arguments.callee和caller的区别 一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函 ...

  2. [js] callee和caller的区别和作用是什么?

    [js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...

  3. java caller_JavaScript中callee和caller的区别与用法实例分析

    本文实例讲述了JavaScript中callee和caller的区别与用法.分享给大家供大家参考,具体如下: 1.callee 在函数的内部,有两个特殊的对象:arguments和this.其中arg ...

  4. js函数的内部属性---arguments,callee,caller

    在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: ...

  5. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  6. 函数的callee和caller的区别和用处

    1. callee \ arguements.callee 是什么? 就是一个指针 可以指向函数本身 1.每个函数都存在一个arguements的对象 尔callee存在于arguements cal ...

  7. callee和caller的区别和用法

    先来一个通俗易懂的简单描述: 简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用:callee是arguments的一个属性,指向其函数自身,比如 ...

  8. callee和caller

    在之前的文章中我说到了arguments,现在来说一下他的属性callee和一个长得相似的双胞胎弟弟caller: 首先说callee,来一段代码: var a=function(){console. ...

  9. arguments.callee

    arguments.callee 属性包含当前正在执行的函数. 描述 callee 是 arguments 对象的一个属性.它可以用于引用该函数的函数体内当前正在执行的函数.这在函数的名称是未知时很有 ...

最新文章

  1. 中科院包云岗:开源模式打造处理器芯片生态,总共要几步?
  2. What's going to be? 2016-Oct-12
  3. linux有三个查看文件的命令:more、cat、less
  4. git checkout -b dev origin/dev详解
  5. python idle撤回上一条命令_找回Python IDLE Shell里的历史命令(用上下键翻历史命令怎么不好用了呢?)...
  6. [hypervisor]-AArch64 (hypervisor)Virtualization学习笔记
  7. nssl1438-战略威慑【枚举,树的直径】
  8. Hyhyhy – 专业的 HTML5 演示文稿工具
  9. 如何快速上手mysql_mysql快速上手3
  10. 服务器来电后自动开机|xfs文进系统备份恢复linux下误删除的文件
  11. MySql执行Sql语句时出现“MySqlException: Parameter ‘@maxNo‘ must be defined.”的错误
  12. ESP8266 WIFI模块学习基础入门
  13. AIRSKIN机器人电子皮肤
  14. 【夜读】一个人保持年轻的5个好习惯
  15. 埃拉托色尼筛法(素数筛)
  16. 全国计算机等级考试评分标准,全国计算机等级考试评分标准
  17. 广州市劳动保障总集成项目1.06亿
  18. 英文期刊投稿指南模板(通用版)-----以IEEE Wireless Communications为例
  19. RGB颜色详细标号 用彩虹色装饰CSDN告示栏 - 酷炫
  20. wordpress谷歌字体_如何以“正确”的方式在WordPress主题中添加Google Web字体

热门文章

  1. 美国大学生数学建模竞赛【赛前资料整理】
  2. Git 是一个分布式版本控制工具
  3. linux mysql批量导入数据,linux怎么快速导入Mysql数据库与导出
  4. linux 进程suricata,如何在 Linux 系统上安装 Suricata 入侵检测系统
  5. 神州租车应用互联网技术,实现“数智化”运营
  6. 前端面试 计算机网络知识,前端面试复习-1-浏览器和计算机网络等
  7. 访问硬件示例 访问键盘控制器
  8. MySQL5.1安装教程
  9. 基于深度学习的CT图像肺结节自动检测技术三—肺有效区域提取
  10. sqlserver 目录名称无效解决办法 在执行批处理时出现错误。错误消息为: 目录名无效