你不知道的JavaScript(十一)函数参数
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)
你不知道的JavaScript(十一)函数参数的更多相关文章
- JavaScript中函数参数的值传递和引用传递
结论: 对于数字.字符串等基本类型变量,是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组) ...
- javascript 在一个函数参数中包含另一个函数的引用
javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) { alert(a); //调用参数 ...
- JavaScript中函数参数的按值传递与按引用传递(即按地址传递)
首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...
- JavaScript —— 给函数参数设置默认值
一.ES5 function fn(x, y){ y = y || 20; console.log(x, y); } fn(); // undefined 20 fn(5); // 5 20 fn(5 ...
- 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递
JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. ...
- 小白科普之JavaScript的函数
一 概述 1.1 函数声明 (1)function命令 函数就是使用function命令命名的代码区块,便于反复调用.这种声明方式叫做函数的声明(Function Declaration). func ...
- js-arguments 函数参数对象详解
前言 JavaScript 函数参数不同于其他编程语言,既不需要规定参数的类型,也不需要关心参数的个数,因此 JavaScript 因函数参数而变得十分灵活,本文总结一下 arguments 参数对象 ...
- JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域
一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...
- 深入理解javascript函数参数与闭包(一)
在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...
- 深入理解javascript函数系列第二篇——函数参数
× 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
随机推荐
- Linux 系列- 基本命令
Linux 基本命令 转自:http://www.taobaotest.com/blogs/qa?bid=353 Linux是一个基于命令的系统,它有很多很强的命令. 但它也有桌面系统,比如KDE, ...
- inotify-tools+rsync实时同步文件安装和配置
服务器A:论坛的主服务器,运行DZ X2论坛程序;服务器B:论坛从服务器,需要把X2的图片附件和MySQL数据实时从A主服务器实时同步到B服务器.MySQL同步设置会在下一编中说到.以下是用于实时同步 ...
- Spark RDD概念学习系列之什么是Pair RDD
不多说,直接上干货! 什么是Pair RDD (1)包含键值对类型的RDD被称作Pair RDD. (2)Pair RDD通常用来进行聚合计算. (3)Pair RDD通常由普通RDD做ETL转换而来 ...
- C++之易混淆知识点四---虚函数与虚继承
C++面向对象中,虚函数与虚继承是两个完全不同的概念. 一.虚函数 C++程序中只要类中含有虚拟函数,编译程序都会为此类生成一个对应的虚拟函数跳转表(vtbl),该虚拟函数跳转表是一个又若干个虚拟函数 ...
- python爬虫:爬取医药数据库drugbank
这个是帮朋友做的,难点就是他们有一个反爬虫机制,用request一直不行,后面我就用selenium直接把网页copy下来,然后再来解析本地的html文件,就木有问题啦. 现在看来,写得有点傻,多包涵 ...
- angular自定义指令-directive
Directive究竟是个怎么样的一个东西呢?我个人的理解是这样的:将一段html.js封装在一起,形成一个可复用的独立个体,具体特定的功能.下面我们来详细解读一下Directive的一般性用法. v ...
- ESM定义模块部分export用法
//定义一个函数和变量 fonction myFunc(){}; const My_CONST=''; export {My_CONST AS THE_COMST,myFunc as THE_FUNC ...
- Oracle-Trigger-Insert tableA and tableB
create or replace trigger trg_a after insert ON a for each rowbegin INSERT INTO b values(:NEW.ID,: ...
- Linux之awk使用
基本语法 $n :当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段 $0:执行过程中当前行的文本内容 \t:制表符 \n:换行符 -F'[:#/]' : 定义三个分隔符,注意有-F ...
- python中try…except的使用,处理程序异常
通常情况下,在python中运行程序,多多少少会出现程序异常的问题,try……except能很好的解决程序中的异常.以下是其用法,在不同位置时进行什么样的工作和起到什么样的作用. try: 可能出现异 ...