你不知道的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函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
随机推荐
- roscore不能启动
通过VNC 在VNC窗口上出入 roscore 得到下面错误信息 ----------------------------------------------------------- proces ...
- POJ 2388 基数排序
这题可以直接nth_element过去 比如这样子 //By SiriusRen #include <cstdio> #include <algorithm> using na ...
- 远程桌面连接Windows Azure中的Ubuntu虚拟机
默认情况下,通过Windows Azure创建的ubuntu虚拟机是不能直接连接远程桌面的,只能通过SSH终端连接. 在Windows Azure Portal中创建Ubuntu虚拟机,创建完成后添加 ...
- vscode 插件推荐 - 献给所有前端工程师
VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给你们推荐很多实用的插件,让你对 vscode 有更深刻的体会,渐渐地你就会知道它有多好用. 走马观 ...
- c#将http调用返回额json中的有关中文的unicode转换为中文
c#将http调用返回额json中的有关中文的unicode转换为中文 中文转Unicode:HttpUtility.UrlEncodeUnicode(string str);转换后中文格式:&quo ...
- svn中有的代码被标注黄色,绿色和红色,分别表示什么意思呢?
1.红色感叹号表示这个文件从服务器上下载下来以后,在本地被修改过.这时执行提交操作就可以了.2.黄色感叹号表示这个文件在提交的时候发现存在冲突,也就是说有别人在你提交之前对这个文件的同一个版本进行了修 ...
- php 生成不重复的随机字符串
md5(uniqid(md5(microtime(true)),true))
- Sentry: Python 实时日志平台
Links https://docs.getsentry.com/on-premise/quickstart/ https://docs.getsentry.com/on-premise/server ...
- 面向对象和结构化程序设计的区别X
面向对象和结构化程序设计的区别 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的" ...
- IOS - 总结(网络状态变更)
- (void)initNetworkMonitor { NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/" ...