理解Javascript参数中的arguments对象

时间:2022-09-04 18:33:04

ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载。

Javascript中arguments的存在可以弥补javascript中函数没有重载的不足。

Javascript中函数中的参数是以数组的形式保存的,所以在JavaScript中调用函数给函数传递的参数时,不会受到我们定义函数时设置的参数个数的限制。也就是说如果我们给一个函数定义了2个参数,我们传递的时候可以不传,可以传一个,也可以传两个,传三个...都可以,不会受函数参数个数的影响。arguments类似一个数组(但是不是真正的Array对象),同样可以像数组一样用方括号来访问它的每一个值,并用arguments.length来判断参数的个数。

应该说我们可以向ECMAScript(javascript是对ECMAScript标准的实现)函数任意的传递参数,并可以通过arguments对象来访问这些参数。

arguments的使用:

function myfun() {
console.log(arguments.length);
} myfun("1","2");//2
myfun("1");//1
myfun();//0
function myfun(num1,num2) {
if(arguments.length === 1){
console.log(arguments[0]);
} else if(arguments.length === 2) {
console.log(arguments[0]+arguments[1]);
} else if(arguments.length === 3) {
console.log(num1+num2+arguments[2]);
}else {
console.log(arguments[0]+" "+num1);
} }
myfun(1);//1
myfun(1,2);//3
myfun(1,2,3);//6
myfun();//undefined undefined

命名参数可以和arguments一起使用

和其他oo语言不一样,在ECMAScript中,所有参数传递的都是值,不可能通过引用传递参数(毕竟arguments中保存的都是参数的值)。

  arguments对象中还定义了callee属性,用来引用当前正在执行的函数,例如在递归中使用:

function factorial(num) {
if(num <=1 ) {
return 1;
} else {
return num*arguments.callee(num-1);
}
} console.log(factorial(5));//120

 需要注意的是如果一个函数的参数有3个,传递的实参只有2个,那么arguments[2]和第三个参数是不共享的.

function foo(x, y, z) {

  // 声明的函数参数数量arguments (x, y, z)
console.log(foo.length); // 3 // 真正传进来的参数个数(only x, y)
console.log(arguments.length); // 2 // 参数的callee是函数自身
console.log(arguments.callee === foo); // true // 参数共享 console.log(x === arguments[0]); // true
console.log(x); // 10 arguments[0] = 20;
console.log(x); // 20 x = 30;
console.log(arguments[0]); // 30 // 不过,没有传进来的参数z,和参数的第3个索引值是不共享的 z = 40;
console.log(arguments[2]); // undefined arguments[2] = 50;
console.log(z); // 40 } foo(10, 20);

  

理解Javascript参数中的arguments对象的更多相关文章

  1. 函数中的 arguments 对象

    JavaScript函数具有像数组一样的对象,这些对象称为arguments,与传递给函数的参数相对应.传递给JavaScript函数的所有参数都可以使用arguments对象来引用. 现在我们开始学 ...

  2. 你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

    JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 -- Arguments 对象. 在实际开发中,Arguments 对象 ...

  3. js中的arguments对象

    在Javascript中没有函数重载,而arguments对象弥补了这点不足. js函数的参数是一个数组,在参数个数不固定的情况下,只需要给方法传递不同元素个数的数组即可.即使声明函数时没有形式参数, ...

  4. JavaScript教程——函数(arguments 对象)

    arguments 对象 定义 由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数.这就是arguments对象的由来. arguments对象包含了 ...

  5. javascript中的arguments对象

    在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量. 1.什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的 ...

  6. JavaScript中通过arguments对象实现对象的重载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 关于javascript闭包中的this对象

    我们知道, this对象是运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象.<Javascript高级程序设计&g ...

  8. 关于 js中的arguments 对象

    arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推.这个对象只有在函数体内部,才可以使用. var f = fu ...

  9. Javascript可变长度参数列表 - Arguments对象

    在一个函数体内,标识符arguments具有特殊含义. Arguments对象是一个类似数组的对象 eg: 验证函数参数的正确数目 function f(x, y, z) { if (argument ...

随机推荐

  1. 【xsy1019】小A的树论

    题意 三种操作: ①区间增值 ②某一个点换父亲 ③求子树和 \(1\leq n\leq 100000\) 分析 Splay维护dfn序. 小结 (1)使用Splay,通常要在Splay的两端各添加一个 ...

  2. Linux 查杀进程

    ps -eaf |grep "stoporder.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9 # ...

  3. 无需Get更多技能,快速打造一个可持久化的任务调度

    项目总是很忙,忙里偷闲还是要总结一下,前一段时间,由于项目中需要,我们需要很多定时汇总数据的情况,项目初期主要使用sql server 计划任务实现对数据的汇总与统计,但是开发到一定时间内,需求提出了 ...

  4. 一起来学Go --- &lpar;go的简介以及环境的安装&rpar;

    Go 相信大家,看到这篇文章的时候,已经自己在百度百科了解了go的发展史已经特性,再次我依然....得哔哔叨一会.   ^.^ go语言的特性 go语言作为一门静态类型开发语言,与当前的开发语言想必具 ...

  5. cocos2dx 中触摸事件分发一些解读

    触摸事件分发中几个代码解读: 怎么说呢,感觉cocos2dx中的消息分发机制,相对于android中触摸事件分发机制要简单的多.因为android中要做区域判断,过滤器,以及父子组件分发给谁等等的逻辑 ...

  6. const引用

    在C++中可以声明const引用 const Type& name = var: const引用让变量拥有只读属性 const int &a = b const int &a ...

  7. 初步了解PE分析

    尝试编写代码获取PE文件的信息. 首先使用 CreateFile打开一个PE文件并返回一个用于访问该对象的handle. HANDLE CreateFile( LPCTSTR lpFileName, ...

  8. Hibernate的Cascade——级联操作

    在Hibernate中,针对持久化实体的配置文件中有Cascade这样一个属性,顾名思义就是级联,也就是说在操作当 前实体时,针对当前实体的操作会影响到相应配置的关联实体.比如针对当前实体进行保存操作 ...

  9. Ubuntu 下将 svg 图片转换为其他格式 &lpar;如 png&rpar;

    参考 How to Convert SVG Files to other Image Formats on Ubuntu 12.04/11.10 Ubuntu 下将 svg 图片转换为其他格式 (如 ...

  10. setuid setgid

    http://blog.csdn.net/oo__yan/article/details/7076889 在Linux系统中每个普通用户都可以更改自己的密码,这是合理的设置. 问题是:用户的信息保存在 ...