JavaScript函数的定义和使用非常简单,我们看一下下面的代码:

    <script type="text/javascript">
var sum = function(a,b){
return a + b;
}
alert(sum(2,3));//5
</script>

我们定义了一个sum函数,具有两个形参a、b,函数返回它们相加的结果。调用该函数的过程也很简单,sum(2,3)为函数的调用。

JS并不要求函数调用时的参数个数和定义时的形参个数保持一致,除了这种调用形式外,我们可以在调用sum函数时使用任意个参数,例如下面的形式也是允许的:

       alert(sum(2,3,4,5));//5
alert(sum(1));//NaN

第一行代码中,我们调用sum函数时多指定两个参数,这在一些强类型的语言中会出现编译错误,但是JS支持这种语法。由于我们只使用到了前面两个参数,所以函数的返回结果为5。

第二行代码中我们只指定了一个参数,第二个参数则为undefined,相加结果为NaN。

实际上JS每一个函数内部都有一个名为arguments的数组,该数组中存放函数调用时的所有参数,也就是说我们定义函数时指定形参的目的也仅仅是为了在函数引用参数方便而已,有了这个数组我们就可以在定义任何函数时都不指定形参。

因此上面的求和函数也可以写成下面这种形式:

    <script type="text/javascript">
var sum = function(){
return arguments[0] + arguments[1];
}
alert(sum(1,2));//3
</script>

但是从代码的可读性上讲,我们通常并会去这么写代码。

只要保证堆栈不溢出,JS函数在调用时可传入任意多个参数,这种特性能为我们带来很多好处,例如我们可以写一个函数来求取任意个数相加的和:

    <script type="text/javascript">
var sum = function(){
var result = 0;
//注意:遍历数组可以使用in关键字
for(i in arguments)
{
result += arguments[i];
}
return result;
}
alert(sum(1,2));//3
alert(sum(3,4,6));//13
alert(sum(1,3,5,6,3,20));//38
</script>

从某种程度上讲,JS函数的这种特性比c++、java语言中函数重载要好用。

这里需要注意的是arguments为数组,我们在遍历时除了使用下面的形式外:

 for(i=0; i < arguments.length; i++)

还可以使用in关键字,如下面形式:

for(i in arguments)

演示代码地址:https://github.com/rongbo-j/you-dont-know-js

你不知道的JavaScript(十一)函数参数的更多相关文章

  1. JavaScript中函数参数的值传递和引用传递

    结论: 对于数字.字符串等基本类型变量,是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组) ...

  2. javascript 在一个函数参数中包含另一个函数的引用

    javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) {  alert(a); //调用参数 ...

  3. JavaScript中函数参数的按值传递与按引用传递(即按地址传递)

    首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...

  4. JavaScript —— 给函数参数设置默认值

    一.ES5 function fn(x, y){ y = y || 20; console.log(x, y); } fn(); // undefined 20 fn(5); // 5 20 fn(5 ...

  5. 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递

    JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. ...

  6. 小白科普之JavaScript的函数

    一 概述 1.1 函数声明 (1)function命令 函数就是使用function命令命名的代码区块,便于反复调用.这种声明方式叫做函数的声明(Function Declaration). func ...

  7. js-arguments 函数参数对象详解

    前言 JavaScript 函数参数不同于其他编程语言,既不需要规定参数的类型,也不需要关心参数的个数,因此 JavaScript 因函数参数而变得十分灵活,本文总结一下 arguments 参数对象 ...

  8. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  9. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  10. 深入理解javascript函数系列第二篇——函数参数

    × 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...

随机推荐

  1. 关于懒加载中的self.和_

    ---恢复内容开始--- 在开发中,经常会用到懒加载,最常用的如加载一个数组 如图,在这个懒加载数组中有的地方用到了_array有的地方用到了self.array 原因是_array是直接访问,而se ...

  2. struts2学习之基础笔记4

    拦截器 1.自定义拦截器类,必须继承AbstractInterceptor类(抽象类) 重写public String intercept (ActionInvocation arg0) 2.在Str ...

  3. HDU 3830 Checkers(二分+lca)

    Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wan ...

  4. C++逐行读取文本文件的正确做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的: ifstream ...

  5. input 框输入数字相关

    input框限制只能输入正整数,逻辑与和或运算 有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: &l ...

  6. IE8不支持响应式设计解决方法

    下载并引入 respond.js 即可 为了针对IE8应用这段脚本,需要针对IE8的条件注释 <!--[if lt IE 9]> --- <! [endif]--> 为了不让并 ...

  7. MDL的一些理解

    驱动程序要操作一个用户模式下的内存(32位下小于2G),那么是有风险的,因为用户模式下当前进程的线程不断切换,用户模式下的地址可能会无效.这时的操作将会有未知结果. 用MDL系统API可以将用户模式下 ...

  8. 记录sql执行顺序

    SQL 语句执行顺序为: FROM WHERE GROUP BY HAVING SELECT DISTINCT UNION ORDER BY 关于 SQL 语句的执行顺序,有三个值得我们注意的地方: ...

  9. nsrunloop与模式

    scrollview的模式切换:退出原来的模式使用新模式. 2018-04-18 18:16:41.208113+0800 CEMonitor[5014:410604] kCFRunLoopDefau ...

  10. 备份和恢复ZBrush文件

    ZBrush可以自动保存绘图的备份副本,并在发生系统错误时提醒您恢复备份副本.当ZBrush软件遇到崩溃.导致错误.非正常退出的时候,可能之前所做的努力就会功亏一篑,那么,在ZBrush软件中能否将文 ...