javascript arguments与javascript函数重载

1.所 有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数。他不是一个数组,如果用typeof arguments,返回的是’object’。虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数 组的push和pop对象是不适用的。

2.函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,arguments不能够创建,是函数自身的参数,只有当函数开始执行是才能使用。

虽然arguments的使用方法,很像数组,但是它并不是数组。arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。

1 function argumentsTest (a,b) {
2     // alert(typeof arguments);
3     alert(arguments.length);
4     alert(arguments[1]);
5 }
6 argumentsTest(1,2,3,4);

输出的结果为4,2;

1 function argumentsTest (a,b) {
2     alert(arguments.callee);
3     alert(arguments.callee.length);
4 }
5 argumentsTest(1,2,3,4);

输出的结果为argumentsTest,2;

3.由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。

根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:

第一:Javascript函数的声明是没有返回值类型这一说法的;

第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。

另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。

如何实现javascript的重载呢?

使用arguments判定参数的个数使用不同的方法实现函数重载:

 1 <script language="JavaScript">
 2 function f(length)
 3 {
 4     var len= arguments.length;
 5     if(1 == len)
 6     {
 7         var width = arguments[1];
 8         alert("高为:"+length+",宽为:"+width);
 9     }
10     else
11     {
12         alert("高为:"+length);
13     }
14 }
15 </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);
时间: 2024-10-18 16:25:56

javascript arguments与javascript函数重载的相关文章

JavaScript案列002 函数重载

重载就是一组具有相同名字,不同参数列表的函数 PS:<JS高级程序设计>里是提到过函数是没有重载的(后来查了一下,在第三版的66页,亲们可以自己翻开书本看看) //方法一 argunments 方法 function fn(){ console.log(arguments) switch(arguments.length){ case 0: alert("0个参数") break; case 1: alert("1个参数") break; case 2:

JavaScript 没有函数重载&amp;Arguments对象

对于学过Java的人来说,函数重载并不是一个陌生的概念,但是javaScript中有函数重载么...接下来我们就进行测试 <script type="text/javascript"> //JavaScript不存在函数重载现象 var add=function(a,b){ return a+b; } var add=function(a,b,c){ return a+b+c; } <span style="white-space:pre">

JavaScript 没有函数重载&amp;amp;Arguments对象

对于学过Java的人来说.函数重载并非一个陌生的概念,可是javaScript中有函数重载么...接下来我们就进行測试 <script type="text/javascript"> //JavaScript不存在函数重载现象 var add=function(a,b){ return a+b; } var add=function(a,b,c){ return a+b+c; } <span style="white-space:pre">

JavaScript(四)---- 函数

函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 格式: function 函数名(形参列表){        函数体 ;        } javascript的函数要注意的细节:    1. 在 javascript中函数定义形参时是不能使用var关键字声明变量的,直接写参数名即可.    2. 在javascript中的函数是没有返回值类型 的,如果函数需要返回数据给调用者,直接返回即可,如果不需要返回

JS函数重载解决方案

JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式.也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了? 办法总是有的,我们可以利用JavaScript中

javascript 函数重载 overloading

函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function overloading or method overloading is the ability to create multiple methods of the same name with different implementations. Calls to an overloaded functi

javascript闭包如何实现函数的重载?

本文和大家分享的主要是妙用javascript闭包实现函数重载相关内容,一起来看看吧,希望对大家学习javascript有所帮助. 1.准备知识 1.1 闭包 闭包是一个函数在创建时,允许该自身函数访问并操作该自身函数以外的变量时所创建的作用域.闭包可以让函数访问所有存在于该函数声明时的作用域内的变量和函数. <script>         var outerValue = "ninja";         var later;         function oute

浅谈JavaScript函数重载

上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR面试的结果还没有出来,听说要等到下周二才出,所以再好好等几天哈. 前面说了这多的废话,现在是时候和伙伴们分享一下面试干货哈.因为二面问到的内容还挺多的,所以这里就不全部列举出来了.这里只讨论一下函数的重载. 下面是面试时的对话,“面”指面试官,“我”就是我~ 面:你能说说JS怎么实现函数的重载吗?

JavaScript的函数重载

java语言中函数的重载和重写可谓是很重要的概念,所以在写js的时候时不时的会想到这种用法,重写先不说,这里只说重载.. <script language="JavaScript"> function test(one) { alert("上面"); } function test(one,two) { alert("下面"); } </srcipt> 如上代码,调用的时候会发现无论你传几个参数,都只会弹出"下面