js函数的实参对象arguments 和其2个属性callee、caller
来源:互联网 发布:淘宝切片详情页上传 编辑:程序博客网 时间:2024/04/30 01:12
当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值。因此,应当给省略的参数赋一个合理的默认值。
<script type="text/javascript">
//将对象o中可枚举的属性名追加到数组a中,并返回这个数组a
//如果省略a,则创建一个新数组并返回这个新数组
function getPropertypeNames(o,a){
a = a || []; //如果未定义,则使用新数组
for(var property in o){
a.push(prototype);
}
return a;
}
//这个函数调用可以传入1个或2个实参
var a = getPropertypeNames(o); //将o的属性存储到一个新数组中
getPropertypeNames(p,a); //将p的属性追加到数组a中
</script>
可变长的实参列表:实参对象
当调用函数的时候传入的实参数超过函数定义时的形参个数时,没有办法直接获得未命名值的引用。参数对象解决了这个问题。
再函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象,这样可以通过数字下标就能访问传入函数的实参值。
实参对象再很多地方都非常有用,下面例子展示了使用它验证实参的个数,从而调用正确的逻辑:
<script type="text/javascript">
function f(x,y,z){
//首先,验证传入实参的格式是否正确
if (arguments.length != 3) {
throw new Error("要求3个参数");
};
//再执行函数的其他逻辑...
}
</script>
记住,arguments并不是真正的数组,它是一个实参对象。可以这样理解,它是一个对象,只是碰巧具有以数字为索引的属性。
【js函数实参对象的 callee 和 caller属性】
除了数组元素,实参对象还定义了 callee 和 caller 属性。
callee属性指代当前正在执行的函数;caller属性指代调用当前正在执行的函数的函数。
<script type="text/javascript">
//callee属性再某些时候会非常有用,比如再匿名函数中通过callee属性来递归调用自身
var factorial = function(x){
if(x <= 1) return 1;
return x * arguments.callee(x-1);
}
</script>
<script type="text/javascript">
//将对象o中可枚举的属性名追加到数组a中,并返回这个数组a
//如果省略a,则创建一个新数组并返回这个新数组
function getPropertypeNames(o,a){
a = a || []; //如果未定义,则使用新数组
for(var property in o){
a.push(prototype);
}
return a;
}
//这个函数调用可以传入1个或2个实参
var a = getPropertypeNames(o); //将o的属性存储到一个新数组中
getPropertypeNames(p,a); //将p的属性追加到数组a中
</script>
可变长的实参列表:实参对象
当调用函数的时候传入的实参数超过函数定义时的形参个数时,没有办法直接获得未命名值的引用。参数对象解决了这个问题。
再函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象,这样可以通过数字下标就能访问传入函数的实参值。
实参对象再很多地方都非常有用,下面例子展示了使用它验证实参的个数,从而调用正确的逻辑:
<script type="text/javascript">
function f(x,y,z){
//首先,验证传入实参的格式是否正确
if (arguments.length != 3) {
throw new Error("要求3个参数");
};
//再执行函数的其他逻辑...
}
</script>
记住,arguments并不是真正的数组,它是一个实参对象。可以这样理解,它是一个对象,只是碰巧具有以数字为索引的属性。
【js函数实参对象的 callee 和 caller属性】
除了数组元素,实参对象还定义了 callee 和 caller 属性。
callee属性指代当前正在执行的函数;caller属性指代调用当前正在执行的函数的函数。
<script type="text/javascript">
//callee属性再某些时候会非常有用,比如再匿名函数中通过callee属性来递归调用自身
var factorial = function(x){
if(x <= 1) return 1;
return x * arguments.callee(x-1);
}
</script>
0 0
- js函数的实参对象arguments 和其2个属性callee、caller
- js arguments和caller,callee
- js的arguments,callee,caller,length,prototype属性
- 函数内部属性:arguments,callee,caller
- 【JS--基础--函数】--隐含参数对象arguments的callee 属性
- JS Function.caller 和 arguments.callee学习
- arguments.callee 和 caller
- arguments,callee和caller
- arguments的caller,callee
- 函数的arguments,caller,callee,call,apply
- JavaScript的arguments、caller和callee
- js的caller和callee
- 【js】js中的隐藏对象arguments,caller,callee
- arguments 对象的 callee 属性
- JavaScript -arguments、caller 和 callee
- js中函数参数arguments、callee、caller,值传递、重载
- js arguments.caller arguments.callee分析
- js中的caller和callee属性
- Android Studio如何快速生成get,set,tostring,构造函数
- git with gerrit 常用操作解析
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- javaBean之单相互的复制
- asp.net 计算两个日期的时间差
- js函数的实参对象arguments 和其2个属性callee、caller
- 基于大数据与深度学习的自然语言对话
- RedHat 9图形界面与命令行界面切换
- input file 实现上传预览图片,以base64上传,兼容IE8+,firefox,chrome
- 解析本地二维码图片
- VS2013 加快编译速度 的方法整理
- Android开发之有效加载大尺寸位图
- Linux:多进程访问同一文件,如何用文件锁进行保护, fcntl()详解
- 《启示录》阅读笔记(十四)——创业型公司的产品管理+大公司如何创新+在大公司施展拳脚