zoukankan      html  css  js  c++  java
  • arguments及arguments.callee

    首先有一个JavaScript函数

    function test(a, b, c, d) {
        return a + b;
    }

     

    在JavaScript中调用一个函数的实参个数可以和被调用函数的形参个数不匹配,要求并没有像java那么严格,因为在ECMAScript中的参数在内部是用一个数组来表示的,函数被调用的时候接收到的始终是这个数组,而不关心数组中包含包含哪些参数,甚至是没有元素也无所谓

    function test(a, b, c, d) {
        return a + b;
    }
    
    console.log(test(10, 20));

      

    这样的代码在JavaScript中是不会报错的,同时在JavaScript中我们可以通过下列代码获得实参及形参的个数

    function test(a, b, c, d) {
        console.log(test.length);//这里获得的是形参的个数
        console.log(arguments.length);//这里获得的是实参的个数,这段代码必须放在函数内部
    }
    
    console.log(test(10, 20));

     

    同时还有一个类似的对象叫做arguments.calee,这个对象通常被用作递归调用

    function test2(num) {
        if(num <= 1) return 1;
        else return num*arguments.callee(num-1);
    }
    
    console.log(test2(5));

     

    如果将arguments.callee(num-1)改为test2(num-1),会在下列调用中会报错

    var F = test2;
    test2 = null;
    console.log(F(5));

     

  • 相关阅读:
    todo-list
    codeforces 794 (#414 DIV1+DIV2)
    2018bnu校赛总结
    codeforces 743D
    HDU-2196 Computer (树形DP)
    HDU- 1005 Number Sequence(矩阵快速幂)
    HDU- 4000 Fruit Ninja(树状数组)
    codeforces 505C
    codeforces 286B
    codeforces 3D
  • 原文地址:https://www.cnblogs.com/asen0713/p/6456057.html
Copyright © 2011-2022 走看看