zoukankan      html  css  js  c++  java
  • arguments 函数内部属性

    1.arguments 是在function方法里面的,是实参数组,用法是挺多的,下面来记录一下
    2.利用arguments实现方法的重载
    1          //01.使用argument模拟方法重载
    2         function sayHi() {
    3             if (arguments.length == 1) {
    4                 alert(arguments[0]);
    5             }
    6             if(arguments.length==2){
    7                 alert(arguments[0]+arguments[1]);
    8             }
    9         }
    3.arguments  的callee属性: 是一个指针,说白了就是当前函数对象的指针
    案例:(阶乘函数)
    1          function getFac(num) {
    2             if (num <= 1)
    3                 return num;
    4             return num * getFac(num - 1);
    5         }
    6 
    7          var result = getFac(5);//5*4*3*2*1
    8         alert(result);
    显示结果如下:
    但是现在我要把  var test= getFac(num),然后改写它的方法
    1          var test = getFac;//把阶乘地址赋给test
    2         getFac = function (num) {
    3             return num;
    4         }
    5         var res = test(5);
    6         alert(res);
    显示结果如下:
    这是为什么呢?
          因为var test = getFac;是把getFac的方法地址赋值给变量test,test存放的是上面getFace  方法的地址,但是接下来
     getFac = function (num) {
                return num;
            }的改写则是改写了原来的getFac方法,这里很重要的一点就是,getFac方法改写了,会新增加一个方法的地址赋值到getFac面,而test还是有指向原来getFac方法的方法指针,因此var res = test(5);时,直接调用原来的getFac方法,执行到 return num * getFac(num - 1);时候,因为getFac改写了,直接return num因此是5*4=20
     
    那如果我要显示原来的120,应该怎么做,很简单,因为arguments里面有个 callee属性,只需要改一句代码
     
    1          function getFac(num) {
    2             if (num <= 1)
    3                 return num;
    4            return num * arguments.callee(num-1);//这个argument是一个指针,直接指向getFace方法原来的地址,而不是后面的getFace改写之后的方法
    5         }
    结果就变成120了;
     
  • 相关阅读:
    高精度
    欢迎来到我的博客!
    1
    POJ 2774 求两个串的最长公共前缀 | 后缀数组
    ural1297 求最长回文子串 | 后缀数组
    洛谷 [SCOI2010]股票交易 | 单调性DP
    BZOJ 1096: [ZJOI2007]仓库建设 | 斜率优化DP
    洛谷 P2906 [USACO08OPEN]牛的街区Cow Neighborhoods | Set+并查集
    BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP
    BZOJ 1342: [Baltic2007]Sound静音问题 | 单调队列维护的好题
  • 原文地址:https://www.cnblogs.com/xhhha/p/3344783.html
Copyright © 2011-2022 走看看