javascript arguments与javascript函数重载
1.所 有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数。他不是一个数组,如果用typeof arguments,返回的是’object’。虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数 组的push和pop对象是不适用的。
2.函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,arguments不能够创建,是函数自身的参数,只有当函数开始执行是才能使用。
 function argumentsTest (a,b) {
     // alert(typeof arguments);
     alert(arguments.length);
     alert(arguments[1]);
 }
 argumentsTest(1,2,3,4);
输出的结果为4,2;
 function argumentsTest (a,b) {
     alert(arguments.callee);
     alert(arguments.callee.length);
 }
 argumentsTest(1,2,3,4);
输出的结果为argumentsTest,2;
3.由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。
根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:
第一:Javascript函数的声明是没有返回值类型这一说法的;
第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。
另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。
如何实现javascript的重载呢?
使用arguments判定参数的个数使用不同的方法实现函数重载:
<script language="JavaScript">
function f(length)
{
var len= arguments.length;
if(1 == len)
{
var width = arguments[1];
alert("高为:"+length+",宽为:"+width);
}
else
{
alert("高为:"+length);
}
}
</srcipt>
4.arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。
1 function count(a){
2     if(a==1){
3         return 1;
4     }
5     return a + arguments.callee(--a);
6 }
7
8 var mm = count(10);
9 alert(mm);
javascript arguments与javascript函数重载的更多相关文章
- JS学习 用 arguments 对象模拟函数重载
		
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载: function doAdd() { if(arguments.length == 1) { alert(arguments[ ...
 - JavaScript 没有函数重载&Arguments对象
		
对于学过Java的人来说.函数重载并非一个陌生的概念,可是javaScript中有函数重载么...接下来我们就进行測试 <script type="text/javascript&qu ...
 - JavaScript(四)---- 函数
		
函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 格式: function 函数名(形参列表){ ...
 - JS函数重载解决方案
		
JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数 ...
 - Javascript函数重载,存在呢—还是存在呢?
		
1.What's is 函数重载? );//Here is int 10 print("ten");//Here is string ten } 可以发现在C++中会根据参数的类型 ...
 - javascript 函数重载 overloading
		
函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function over ...
 - JavaScript模拟函数重载
		
JavaScript是没有函数重载的,但是我们可以通过其他方法来模拟函数重载,如下所示: <!DOCTYPE html> <html> <head> <met ...
 - JavaScript的函数重载
		
java语言中函数的重载和重写可谓是很重要的概念,所以在写js的时候时不时的会想到这种用法,重写先不说,这里只说重载.. <script language="JavaScript&qu ...
 - JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
		
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
 
随机推荐
- VG vs SS WE vs IM [20160815]
			
上单:慎,纳尔,艾克,艾瑞莉娅,普朗克 中单:弗拉基米尔,玛尔扎哈,卡尔玛,丽桑卓,索尔,崔斯特,辛德拉 打野:雷克赛,奈德丽,古拉加斯,伊莉丝,赫卡里姆,玛尔扎哈 下路:艾希,克格莫,烬,希维尔,布 ...
 - Haproxy+asp.net +RedisSessionStateProvider 完美实现负载均衡,并且session保持
			
.net framework 4.5下测试成功,使用RedisSessionStateProvider 2.2.1保持session数据,通过Haproxy保持会话数据.首先在PM下安装RedisSe ...
 - 将框架的底层改掉,改成一个轻量级的ORM
			
公司底层的缺点 1.功能有限,只有增删查改 2.不支持异步 3.不支持懒加载 4.不支持泛型 5.不支持Linq 6.性能没做到最好,比如FirsttOrDefault()只能通过查找select * ...
 - 计算机视觉:关于视觉算法源码中常出现的imageLib库的使用指南
			
1.ReadImage(CImage &im, char* path)/ WriteImage(CImage &im, char* path) (1)将im强制转换为CByteImag ...
 - [计算机取证技术] VDI-in-a-Box Analysis Results
			
原文跳转: http://dig4n6.blogspot.tw/2013/07/vdi-in-box-analysis-results.html *文中引用图片如无法浏览,请科学上网* VDI-in- ...
 - How to force the UI to refresh immediately(WPF)
			
Question 0 Sign in to vote Folks, In my application, when the user hits "Submit" button, I ...
 - Blackfin DSP(三):BF533 的EBIU接口之flash
			
上一节谈了GPIO问题,是用BF561 ezkit进行说明的,这是因为561 ezkit上的GPIO是与LED直连的,讲解GPIO时不会涉及到其它问题,降低了复杂性.对于533,也采取同样的操作即可. ...
 - 8天掌握EF的Code First开发系列之2 简单的CRUD操作
			
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
 - awk用法
			
目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从 ...
 - jquery remove/add css
			
<input type="submit" class="btn btn-primary" id="submit" value=&quo ...