Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3220902
  • 博文数量: 146
  • 博客积分: 3918
  • 博客等级: 少校
  • 技术积分: 8557
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-17 13:52
个人简介

个人微薄: weibo.com/manuscola

文章分类

全部博文(146)

文章存档

2016年(3)

2015年(2)

2014年(5)

2013年(42)

2012年(31)

2011年(58)

2010年(5)

分类: Python/Ruby

2012-06-26 19:21:27

      和C语言严格的编译检测不同,Javascript函数的参数采用一种灵活的方法。我们这篇博文,主要学习Javascript的函数参数的问题。

    熟悉C 语言的筒子们比较了解,C语言对函数的定义,声明还有调用 对参数个数的一致性检查比较严格。如果定义函数有3个入参,你调用时传递4个参数过去,编译器会报错。但是Javascript不同,不一定非得传三个参数进去,你传4个参数,2个参数,甚至0个参数都没关系,解析器不会抱怨。

    下面我们用Firebug工具来学习一下Javascript函数参数的特性。Firebug是一个强大的WEB编程的工具,我们知道C语言调试,我们有GDB这样很强大的工具,Firebug是一个类似很强大的工具。你装了Firefox浏览器后,可以很方便的调试。至于怎么样在Firefox下安装Firebug插件,这个自行百度即可

    看下右边黑色笔迹圈起来的小爬虫一样的logo,对应的就是Firebug。点击小爬虫,你就可以得到下面的Firebug工作区域。对于我们来讲,我们使用控制台,来学习Javascript函数参数相关的知识。


    EMCAscript的函数的入参都保存在一个叫arguments的数组里面,函数可以轻易的获取传进的入参。他不介意你传的的参数是否和函数定义中的形参个数是否一致。
    OK,写测试代码,验证。

1 参数个数不一致,解析器也OK。

    上图是演示如何使用Firebug写测试程序,右侧是代码,点击运行,左侧出现运行的结果为了方便阅读,后面就不采用截图展示的方法了。
    我们看到sum函数有两个参数,但是调用的地方,我们用了sum(1,2,100),传进了三个参数。事实证明,这样解析器并不会报错,返回了前两个值1,2 的和

2 参数保存在一个叫arguments的数组里面。至于参数的个数可以通arguments.length来获得。

Firebug 右侧输入:
  1. function get_args()
  2. {
  3.     return arguments;
  4. }
  5. get_args(1,3.14,"hello world",null);
点击运行,左侧得到运行结果如下:

  1. >>> function get_args() { return arguments; } get_args(1,3.14,"hello world",null);
  2. [1, 3.14, "hello world", null]
OK,我们看,入参就是保存在arguments数组中。

    我们看到了这些特性,我们可以很方便的写出一个不定参数个数的加法。看下面代码:

点击(此处)折叠或打开

  1. function sum() {
  2.     var i, res = 0;
  3.     var number_of_params = arguments.length;
  4.     for (i = 0; i < number_of_params; i++) {
  5.         res += arguments[i];
  6.     }
  7.     return res;
  8. }

  9. sum(1,3,9,4)
看下运行效果:结果正确是17.

  1. >>> function sum() { var i, res = 0; var num...ents[i]; } return res; } sum(1,3,9,4)
  2. 17
3 形参和arguments是对应的,修改arguments数组中的值,函数的参数也对应改变:
看文字比较晦涩,看不明白,一个例子就明白了。代码如下:

  1. function do_add(num1,num2)
  2. {
  3.   arguments[1] =10;
  4.   return (arguments[0]+num2);
  5. }
  6. do_add(1,6);
运行结果如下:

  1. >>> function do_add(num1,num2) { arguments[1]... return (arguments[0]+num2); } do_add(1,6);
  2. 11
arguments[1] 也就是num2,改了arguments[1],在return语句中的num也不再是传进来的6,而是变成了10。

参考文献:
1 object-oriented Javascript
2 Javascript 高级程序设计
阅读(7119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~