• 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);
  • 相关阅读:
    电信网络拓扑图自动布局之总线
    长短链接区别-2
    TCP长连接与短连接的区别
    memset(&a, 0, sizeof(struct customer))函数
    linker command failed with exit code 1
    iOS “[App] if we're in the real pre-commit handler we can't actually add any new fences due
    iOS 获取屏幕某个区域的截图-b
    iOS-集成支付宝支付、微信支付简单总结
    邓白氏码的申请-iOS公司开发者账号准备
    iOS 自定义导航栏 和状态栏
  • 原文地址:https://www.cnblogs.com/cocos2014/p/4289997.html
Copyright © 2020-2023  润新知