你不知道的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函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...
随机推荐
- BZOJ 3674/BZOJ 3673 主席树
思路: 主席树维护可持久化数组 剩下的就是普通的并查集了- //By SiriusRen #include <cstdio> #include <cstring> #inclu ...
- 多帧图片转gif
示例 工具photosh cc2017 1: 文件--> 脚本--> 将文件载入堆栈--> 选择文件-->勾选窗口的时间轴-->底部 从图层建立帧--> 设置时间延 ...
- 01《UML大战需求分析》阅读笔记之一
在大二的时候就已经在课堂上对UML也就是统一建模语言有了初步的了解,但是却不怎么明白,虽然可以画图可以完成任务,但是有些糊里糊涂.所以特地把这门书作为精读书籍,想要更加深度地学习UML.很多内容只用语 ...
- CDR中怎么绘制一个漂亮的球衣?
cdr中怎么绘制一个漂亮的球衣?想要绘制一个漂亮的球衣,该怎么绘制呢?下面我们就来看看cdr绘制漂亮的球衣的教程,需要的朋友可以参考下: 1.画一个长方形,增加节点,移动节点,变形成如图 2.直线变曲 ...
- ZBrush通过遮罩得到子物体
ZBrush 中通过遮罩为模型添加子物体的方法简单且方便,我们可以通过按住Ctrl键绘制遮罩结合相关命令创建具有抽出厚度的模型提取出作为子物体附在模型表面.本文将详细介绍在Zbrush中如何通过遮罩得 ...
- JSP Java服务器页面
大家好!好久不见!今日我们开始学习JSP了,一些记录基础性的知识在这里与大家分享. 先说下URL(Uniform Resource Locator 统一资源定位符). URL包括传输协议(http:/ ...
- Java实现18位身份证校验代码
import java.util.Scanner; /** * 18位身份证校验 * @author [J.H] * */ public class Test { // 身份证校验 public st ...
- node——REFL介绍
看视频笔记 REFL全称:Read-Eval-Loop(交互式解释器) R 读取 -读取用户输入,解析输入了javascript数据结构并存储在内存中 E 执行 -执行输入的数据结构 P 打印 -输出 ...
- webpack安装,npm WARN optional SKIPPING OPTIONAL DEPENDENCY,npm WARN notsup SKIPPING OPTIONAL DEPENDENCY警告
npm install webpack -g//全局安装webpack 电脑上安装完后: 其中有两个警告: npm WARN optional SKIPPING OPTIONAL DEPENDENCY ...
- [剑指offer] 1. 二维数组中的查找 (数组)
注意是有序数组!! 思路: 1.利用二维数组由上到下,由左到右递增的规律,选取右上角或者左下角的元素a[m][n]与target进行比较, 当target小于元素a[m][n]时,那么target必定 ...