Javascript 函数中的参数使用分析_Javascript教程-查字典教程网
Javascript 函数中的参数使用分析
Javascript 函数中的参数使用分析
发布时间:2016-12-30 来源:查字典编辑
摘要:首先,在JS中函数也是一种标识符,可以将它赋值给新的变量,也可以通过这个变量来调用。这有点像C语言的函数指针,不过也不完全一样,如下面的代码...

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

复制代码 代码如下:

function myfun() {

alert("funcation call");

}

var fun = myfun;

fun();

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

复制代码 代码如下:

function args() {

if (arguments[0] != undefined) {

alert(arguments[0]);

}

}

args(); //什么也不输出

args("hehe"); //弹出参数值

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

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

复制代码 代码如下:

function format() {

if (arguments.length == 0) {

return "";

}

var formatter = arguments[0];

for (var i = 1; i < arguments.length; i++) {

formatter = formatter.replace(new RegExp("{"+(i-1)+"}","gm"), arguments[i]);

}

return formatter;

}

alert(format("Hello {0},this is the fetures of {1}!","world","javascript"));

上面的代码,简单实现了格式化输出的基本功能,当然,有兴趣的话,还可以把它做得更好 ,最后再说一个吧,arguments还有个callee属性,它代表了当前被调的函数,这个属性值某些情况下还是有点用处的。考虑如下代码:

复制代码 代码如下:

function sum(num) {

if (num == 1) {

return num;

} else {

return num + sum(num - 1);

}

}

var mysum = sum;

alert(mysum(5)); //输出 15

sum = function() { return 1; };

alert(mysum(5)); //输出 6

这是一个递归求和的函数,mysum一开始和sum是同样的函数,如果在程序执行过程中sum函数体被改变了,再调用mysum的结果就会不同,如果将函数改成这样,就不会出现这样的问题啦~

复制代码 代码如下:

function sum(num) {

if (num == 1) {

return num;

} else {

return num + arguments.callee(num - 1);

}

}

var mysum = sum;

alert(mysum(5)); //输出 15

sum = function() { return 1; };

alert(mysum(5)); //输出 15

如上面这样,不管外面的引用怎么改变callee都会指向当前的被调函数,在用JS写递归的时候,这点还是有必要注意一下的,虽然一般不

会出现这种错误,但是如果出了是不太容易发现原因的,会浪费不少时间。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类