【实例讲解】JS中形参、实参可以不一致
function myFunction()
{
var x=5;
return x;
}
补充:JS中带返回值的函数,在函数定义时不体现
//正文
1.实参与形参个数可以有偏差,不会因为参数不统一而错误。
例1:
1
2
3
4
5
6
|
functionbox(a,b){
return a + b;
}
alert(box( 1 , 3 , 5 )); //运行结果:“4”。
//进行的运算为“1+3”,没有用到“5”。
|
例2:
1
2
3
4
5
|
functionbox(a,b,c){
return a + b+c;
}
alert(box( 1 , '5' )); //运行结果:15undefined。
//结果为sring类型。进行的运算1与‘5’的字符连接,再与一个不存在(undefined)的字符连接,结果即为15undefined。
|
2.JS函数不能重载。
因为“函数重载”靠的就是相同函数名根据参数的不同,匹配特定函数,从而执行函数的过程;而JS函数不再排斥“异形”函数,缺失了辨别相同函数名的不同函数的过程,相同函数名的情况下,JS调用时,只会执行最后一个所调函数。
例3:
1
2
3
4
5
6
7
8
9
10
|
function box(a,b,c){
alert( '执行了第一个函数,' + a + '+' + c + '=' +(a+c));
}
function box(a,b,c){
alert( '执行了第二个函数,' + a + '+' + b + '=' +(a+b));
}
alert(box( 1 , '5' , 3 )); //执行结果为:执行了第二个函数,1+5=15
//类型为string.
|
例4:
1
2
3
4
5
6
7
8
9
10
|
function box(a,b,c){
alert( '执行了第二个函数,' + a + '+' + b + '=' +(a+b));
}
function box(a,b,c){
alert( '执行了第一个函数,' + a + '+' + c + '=' + (a+c));
}
alert(box( 1 , '5' , 3 )); //执行结果为:执行了第一个函数,1+3=4
//类型为number.
|
3.函数运用arguments对象,很有特点
arguments对象的使用,很好地解释了支持形参、实参不一致而不出错的原理性问题。
3.1 arguments[index]指定参数值,index为参数的索引
例5:
1
2
3
4
5
6
7
|
function box(){
return arguments[ 0 ]+arguments[ 5 ];
}
alert(box( 1 , 2 , 3 , 4 , 5 , 6 )); //执行结果为:7
alert(box( 'Test' , 'UseCase' , 3 , 4 , 5 , 6 )); //执行结果为:Test6
//arguments[0]表示第一个参数,arguments[5]表示第六个参数;上面两个执行结果,都反映了,box()函数只用了所需的指定参数,其他参数都被忽略了。
|
3.2 arguments.length得到参数的个数
例6:
1
2
3
4
5
6
7
|
function box(){
return arguments.length;
}
alert(box( 1 , 2 , 3 , 4 , 5 , 6 )); //执行结果为:6
alert(box( 'Test' , 'UseCase' , 3 , 4 , 5 , 6 )); //执行结果为:6
//当需要知道某序列有多少元素时,将其传入该函数,即可知道
|
3.3 arguments.length的扩展运用
例7:
1
2
3
|
function box(){
var sum = 0 ;
for (var i= 0 ;i</arguments.length;i++){>
|
4.一个显而易见的错误(只为下面说明问题)
看了例7,可能会有点迷糊,因而添加例8、例9,都说明了一个问题,参数为函数体提供必要信息,用于可控地实现功能。函数(function:功能)
例8:
1
2
3
4
5
6
7
|
function box(a,b){
return a+b+c;
}
alert(box( 1 , 2 , 3 )); //ReferenceError:c is not defined
alert(box( 1 , 2 )); //ReferenceError:c is not defined
//字面量c未定义
|
例9:
1
2
3
4
5
6
|
function box(){
return a+b+c;
}
alert(box( 1 , 2 , 3 )); //ReferenceError:a is not defined
//字面量a未定义
|
简单比较例2、例4、例8,可以得出这样的结论,JS中的函数体与形参、实参以及形参与实参的关系是:
遵循一个原则:函数实现功能
函数体与形参关系:形参必须满足函数体的必要需求,否则没法进行,即使用了形参未定义的‘字面量’,出错:c is not defined 。
形参与实参关系:实参在形参的标尺下,多出的被拦截而被忽略,缺少的被判断为undefined(不存在),但都不报错。
智能:是说JS函数对多出的实参去粗取精,对少的实参做了适当的处理,没有雷厉加之,使得函数运行更大限度地平稳协调。
【实例讲解】JS中形参、实参可以不一致相关推荐
- 实例讲解js中的预编译
js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了.为了更好地了解js语言背后的运行机理.笔者采用实例化的方式讲解我理解的预编译. 理 ...
- python求三个整数最大值_实例讲解Python中整数的最大值输出
实例讲解Python中整数的最大值输出 在Python中可以存储很大的值,如下面的Python示例程序: x = 1000000000000000000000000000000000000000000 ...
- linux 命令 cd -p,Linux_实例讲解Linux中cd命令切换目录的使用技巧,cd命令大家再熟悉不过了,bash sh - phpStudy...
实例讲解Linux中cd命令切换目录的使用技巧 cd命令大家再熟悉不过了,bash shell经常会被用到的切换目录命令. 接下来我们直接通过万能的man来了解cd命令. 直接 man cd 是不行的 ...
- python中能够处理的最大整数是_实例讲解Python中整数的最大值输出
在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print ( ...
- linux ksh 用户名,实例讲解Linux中ksh的用法
实例讲解Linux中ksh的用法 发布时间:2008-02-18 20:46:01来源:红联作者:Modegle 熟悉Linux的朋友肯定都知道bash,它是Linux默认的命令行解释程序,熟悉Sol ...
- 详细讲解js中的深拷贝与浅拷贝
1 概述 深拷贝与浅拷贝在其它语言中也经常被提及到,在实际项目开发过程中也常常需要区分当前使用的到底是深拷贝还是浅拷贝,有时候在该使用深拷贝的地方,我们使用了浅拷贝,会导致深藏不露的bug. 2 数据 ...
- java console 交互_实例讲解java中Console类的用法
java的Console类的使用方法及实例 java的Console类的使用方法及实例 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Win ...
- 行为模型实例 php,JS中事件模型的实例详解
之前对事件模型还是比较清楚的,许多概念都清晰映射在脑海中.工作之后,一方面使用的 局限性,二是习惯于用框架中的各种事件监听方式,简单即方便,久而久之,事件的一些概念开 始淡出记忆中,就像我现在已经开始 ...
- android软件的data使用方法,实例讲解Android中SQLiteDatabase使用方法
SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已.虽然SQLite的有点很多,但并不是如同PC端的mysql般强大 ...
最新文章
- 神策数据 App 可视化全埋点 2.0 重磅升级!抢先体验
- Cpp 对象模型探索 / 程序转化语义
- 从基础末尾:CSS适用教程
- js字符串、数组和数字常用方法总结
- Linux的实际操作:文件目录类实用指令(压缩gzip tar -zcvf和解压缩gunzip tar -zxvf)
- 字节跳动的敌人只有时间
- Nacos简介和安装
- Linux_《Linux命令行与shell脚本编程大全》第十章学习总结
- 螃蟹保存方法保存时间_螃蟹吃不完怎么保存?学会这4招,不论是海蟹、河蟹通通都不愁...
- 初识Hibernate的主配置和映射配置
- vm16安装efi win7 方案
- [地图]通用网格地图库:粗糙地形导航的实现和用例
- Windows出现“未连接到互联网代理服务器出现问题,或者地址有误。问题解决办法”
- 联想android怎么解密,联想G886手机如何解密
- opencv如何把一个矩阵不同列分离开_【opencv基础】OpenCV从Mat中提取某些行或列
- CentOS安装QEMU(试验成功且简单的方法)
- 求伯君:从未停止写程序的程序员
- 学术届职称与凡人修仙传等级对应关系
- M1卡的简介与操作命令
- 光伏组件机器视觉新突破!维视智造上线汇流带引线焊接检测新方案 “误检率”低至0.01%