日期:2014-05-16  浏览次数:20344 次

js函数的参数问题


关于JS中的函数,相信大家已经很了解了,其中有些特性呢,感觉还是值得提一提的,下面就说说JS中的函数吧。

  首先,在JS中函数也是一种标识符,可以将它赋值给新的变量,也可以通过这个变量来调用。这有点像C语言的函数指针,不过也不完全一样,如下面的代码:


1 function myfun() {
2     alert("funcation call");
3 }
4
5 var fun = myfun;           
6
7 fun();
8



  再有一个值得说一下的,就是JS中的函数的参数不一定是严格匹配的,通常的编程经验,比如有这样一个函数 fun(aa,bb),那么我们在调用这个函数的时候就应该给他传递两个参数。但是在JS中,我们可以给他传递任意个参数,1个,3个,等等,都可以。 JS中的参数传递,不完全是按照函数声明时指定的那些参数,在每次调用函数的时候,都会有一个命名为arguments的数组,这个数组里面存储了函数调用时,传递进来的所有参数,有了它,我们甚至可以不再函数声明时指定形式参数,如下代码:


1 function args() {
2     if (arguments[0] != undefined) {
3
4         alert(arguments[0]);
5     }
6 }
7
8 args();         //什么也不输出
9 args("hehe");   //弹出参数值
10





  如上所示,arguments数组的每个下标,从0开始一次对应着传递进来的每个参数,如果指定位置没有参数,那么他就会是undefined,

我们可以使用arguments.length来判断传递进来的参数个数,这种方式有时候会很有用,比如,我们可以利用这个特性来模拟C语言的printf函数:


1 function format() {
2     if (arguments.length == 0) {
3         return "";
4     }
5     var formatter = arguments[0];
6
7     for (var i = 1; i < arguments.length; i++) {
8
9         formatter = formatter.replace(new RegExp("\\{"+(i-1)+"\\}","gm"), arguments[i]);
10     }
11
12     return formatter;       
13 }
14
15 alert(format("Hello {0},this is the fetures of {1}!","world","javascript"));