JavaScript之caller和caller属性
caller和caller属性
一、callee属性是一个指针,指向拥有这个arguments对象的函数。
为什么要有这个属性呢?我们来看一下下面这个递归函数
function factorial(num){if(num<=1){return 1;}else{return num*factorial(num-1);}}
这个函数的执行和函数名factorial紧紧耦合在了一起。
当函数名发生改变的时候,里面的factorial也要随着改变
为了消除这种紧密耦合的现象,可以像下面这样使用arguments.callee
function factorial(num){if(num<=1){return 1;}else{return num*arguments.callee(num-1);}
}
在这个重写的factorial()函数的函数体内,没有再引用函数名factorial。
这样,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。
例如:// 实际上是在另一个位置上保存了一个函数的指针var trueFactorial = factorial;factiroal = function(){return 0;}alert(trueFactorial(5)) // 120alert(factorial(0)) // 0
函数的名字仅仅是一个包含指针的变量而已。
function sayColor(){
alert(this.color);
}
o.sayColor = sayColor;
全局的sayColor()函数与o.sayColor()指向的仍然是同一个函数。
二、ECMAScript5也规范了另一个函数对象的属性:caller
这个属性中保存着调用当前函数的函数引用,如果是在全局作用域中调用当前函数,它的值为null。
例如:function outer(){inner();}function inner(){alert(inner.caller);}outer();这是提示框中显示的是out()函数的源代码,因为outer()调用了inner(),所以inner.caller就指向outer()。
严格模式下:
访问arguments.callee会导致错误。
ECMAScript5还定义了arguments.caller属性,
严格模式下访问也会导致错误,非严格模式下这个属性始终是undefined。
严格模式下,不能为函数的caller属性赋值,否则会导致错误。
定义arguments.callee属性是为了分清arguments.caller和函数的caller属性。
获取参数的引用使用callee,获取函数的引用使用caller
JavaScript之caller和caller属性相关推荐
- javascript下的arguments,caller,callee,call,apply示例及理解
在看到大家如此关注JS里头的这几个对象,我试着把原文再修改一下,力求能再详细的阐明个中意义.在提到上述的概念之 前,首先想说说javascript中函数的隐含参数:arguments Argument ...
- JavaScript 之arguments、caller 和 callee 介绍
1.前言 arguments, caller , callee 是什么? 在javascript 中有什么样的作用?本篇会对于此做一些基本介绍. 2. arguments arguments: ...
- JavaScript中callee和caller的用法解读
1.callee: callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数. 作用:指向当前对象. 例1: <script type="text/java ...
- Javascript中callee和caller的作用
Javascript中callee和caller的作用 caller 是返回⼀个对函数的引⽤,该函数调⽤了当前函数: callee 是返回正在被执⾏的 function 函数,也就是所指定的 func ...
- 【Infragistics教程】在javascript类中添加静态成员属性
2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 在一个javascript类中创建一个属性的需求,它需要被所有对象 ...
- JavaScript 中遍历对象的属性
原文链接 JavaScript 中遍历对象的属性 参考 JavaScript中的属性:如何遍历属性 <JavaScript 高级程序设计> 概述 遍历 JavaScript 对象中的属性没 ...
- JavaScript 中遍历对象的属性 1
JavaScript 中遍历对象的属性 原文链接 JavaScript 中遍历对象的属性 参考 JavaScript中的属性:如何遍历属性 <JavaScript 高级程序设计> 概述 遍 ...
- javascript 解决IE8 兼容 placeholder 属性 含password
javascript 解决IE8 兼容 placeholder 属性 含password function placeholderfun(){if( !('placeholder' in docume ...
- JavaScript学习(八)—属性节点和属性值的操作
JavaScript学习(八)-属性节点和属性值的操作 方式一: 利用元素节点的attributes属性来获取该元素身上所有的属性 格式1:元素节点.attributes 返回值:返回值为所有属性的节 ...
最新文章
- TCP 的那些事儿(下)
- Python 面向对象、封装
- LNK1136报错解决方法
- 补课系列:最小生成树
- 图像传感器与信号处理——SFR算法/ISO 12233解读
- 10种轻量级人脸检测算法大PK
- SAP Analytics Cloud里如何基于一个已有的model创建Story
- 【渝粤教育】电大中专就业指导作业 题库
- 华为acl怎么生效_华为ACL配置教程(一)
- 将React Native升级到最新版本的最简单方法
- springboot+mybatis+druid 多数据源整合
- msp430的常量可以这样定义
- 【千锋】网络安全笔记(总篇)--- 持续更新
- php开源桌面会议系统,开源视频会议系统 OpenMeetings
- 电商平台接入手机支付宝支付(服务商授权模式,可直接付款给卖家)
- 百度云c++语言模拟器,C++语言基础教程
- 【OCP】小麦苗OCP(包括11g、12c、18c、19c等)网络班早已开讲,注重实践,报名一次,终身可免费升级学习,推荐有红包...
- 1082 射击比赛 (20分)
- 数据分析入门书籍整理
- 为什么Vue(默认情况下)比React性能更好