码迷,mamicode.com
首页 > 其他好文 > 详细

函数的参数

时间:2018-02-03 23:12:28      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:argument   str   undefined   asc   logs   关心   改变   length   markdown   

ECMAScript函数不在乎传进来多少个参数,也不在乎传进来的参数是什么类型。原因是因为ECMAScript中的参数在内部用一个数组来表示。函数接收到的始终是这个数组,而不关心数组中包含哪些参数和参数的个数。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

arguments对象

这个对象只是和数组类似,并不是Array的实例,之所以与数组类似是因为:

  • 可以使用方括号的语法来访问
  • 可以使用length属性来确定传进来的参数个数,可以根据传进来的不同参数个数,做不同的操作

使用

1.arguments对象可以与命名参数一起使用
2.传递不同的参数个数,会影响到arguments对象和命名参数的值

function doAdd(num1,num2){
    arguments[0] = 10;
    arguments[1] = 10;
    alert(arguments[1]);
    alert(num2);
}
doAdd(20);// 10 undefined,这里只传递了一个参数,对arguments[1]进行修改并不会反映到num2上,这是因为arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的的命名参数个数决定的。还有没有传递值的命名参数将自动被赋予undefined值
doAdd(5,20);//10 10 

如果传递了相应的命名参数,对arguments对象中的值进行改变,也会反映到命名参数中,即会同步。但是读取这两个值并不会访问相同的内存空间,它们的内存空间是独立的。
ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数

没有重载

因为JavaScript中的函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能的。

function doAdd(num1){
    alert(num2+num1);
}
function doAdd(num1,num2,num3){
    alert(num1);
}
doAdd(5); //5 后面定义的函数覆盖了之前的那个函数

但是可以通过检查传入函数的参数类型和个数并作出不同的反应,可以模仿方法的重载。

函数的参数

标签:argument   str   undefined   asc   logs   关心   改变   length   markdown   

原文地址:https://www.cnblogs.com/sminocence/p/8410867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!