arguments.callee和caller的区别
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的区别相关推荐
- callee与caller的区别
Javascript arguments.callee和caller的区别 一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函 ...
- [js] callee和caller的区别和作用是什么?
[js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...
- java caller_JavaScript中callee和caller的区别与用法实例分析
本文实例讲述了JavaScript中callee和caller的区别与用法.分享给大家供大家参考,具体如下: 1.callee 在函数的内部,有两个特殊的对象:arguments和this.其中arg ...
- js函数的内部属性---arguments,callee,caller
在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: ...
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...
函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...
- 函数的callee和caller的区别和用处
1. callee \ arguements.callee 是什么? 就是一个指针 可以指向函数本身 1.每个函数都存在一个arguements的对象 尔callee存在于arguements cal ...
- callee和caller的区别和用法
先来一个通俗易懂的简单描述: 简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用:callee是arguments的一个属性,指向其函数自身,比如 ...
- callee和caller
在之前的文章中我说到了arguments,现在来说一下他的属性callee和一个长得相似的双胞胎弟弟caller: 首先说callee,来一段代码: var a=function(){console. ...
- arguments.callee
arguments.callee 属性包含当前正在执行的函数. 描述 callee 是 arguments 对象的一个属性.它可以用于引用该函数的函数体内当前正在执行的函数.这在函数的名称是未知时很有 ...
最新文章
- 中科院包云岗:开源模式打造处理器芯片生态,总共要几步?
- What's going to be? 2016-Oct-12
- linux有三个查看文件的命令:more、cat、less
- git checkout -b dev origin/dev详解
- python idle撤回上一条命令_找回Python IDLE Shell里的历史命令(用上下键翻历史命令怎么不好用了呢?)...
- [hypervisor]-AArch64 (hypervisor)Virtualization学习笔记
- nssl1438-战略威慑【枚举,树的直径】
- Hyhyhy – 专业的 HTML5 演示文稿工具
- 如何快速上手mysql_mysql快速上手3
- 服务器来电后自动开机|xfs文进系统备份恢复linux下误删除的文件
- MySql执行Sql语句时出现“MySqlException: Parameter ‘@maxNo‘ must be defined.”的错误
- ESP8266 WIFI模块学习基础入门
- AIRSKIN机器人电子皮肤
- 【夜读】一个人保持年轻的5个好习惯
- 埃拉托色尼筛法(素数筛)
- 全国计算机等级考试评分标准,全国计算机等级考试评分标准
- 广州市劳动保障总集成项目1.06亿
- 英文期刊投稿指南模板(通用版)-----以IEEE Wireless Communications为例
- RGB颜色详细标号 用彩虹色装饰CSDN告示栏 - 酷炫
- wordpress谷歌字体_如何以“正确”的方式在WordPress主题中添加Google Web字体
热门文章
- 美国大学生数学建模竞赛【赛前资料整理】
- Git 是一个分布式版本控制工具
- linux mysql批量导入数据,linux怎么快速导入Mysql数据库与导出
- linux 进程suricata,如何在 Linux 系统上安装 Suricata 入侵检测系统
- 神州租车应用互联网技术,实现“数智化”运营
- 前端面试 计算机网络知识,前端面试复习-1-浏览器和计算机网络等
- 访问硬件示例 访问键盘控制器
- MySQL5.1安装教程
- 基于深度学习的CT图像肺结节自动检测技术三—肺有效区域提取
- sqlserver 目录名称无效解决办法 在执行批处理时出现错误。错误消息为: 目录名无效