一、参数的理解
1、ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以。
2、实质上,函数可以通过arguments对象来访问参数数组,从而获取传递给函数的每一个参数【即第一个参数是arguments[0],第二个参数是arguments[1],以此类推】。使用length属性来确定传递进来多少个参数。eg:
//函数 function sayHi(name,msg){ console.log('hello! '+name+','+msg); } //同样的使用arguments也可以实现 function sayHi(){ console.log('hello! '+arguments[0]+','+arguments[1]); } //调用时候,可以返回同样的结果 sayHi('tom','how old are you today?'); //hello!tom,how old are you today?
3、ECMAScript没有函数签名【接收参数的类型和个数没影响】,所以函数重载没办法实现。
4、利用arguments可以实现函数的重载效果,eg:
//根据传递参数的个数来执行不同的逻辑 function doAdd(){ if(arguments.length==1){ console.log(arguments[0]+10); }else if(arguments.length==2){ console.log(arguments[0]+arguments[1]); } } //调用 doAdd(10); //20(执行if) doAdd(10,30); //40(执行elseif)
5、ECMAScript中没有函数重载,so如果存在两个同名的函数,则该名字只属于后定义的函数【即后定义的函数才有效】。