• JS之arguments属性解读函数传参?


    Arguments
      该对象代表正在执行的函数 和 调用他的函数的参数。

      arguments属性:为当前执行中的 Function 对象返回 arguments 对象 和 参数。

    [function.]arguments[n]

    参数说明:

      参数function :选项。当前正在执行的 Function 对象的名字。

      n:表示传递过来的参数下标索引

    1.对于参数对象
      说明:Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。

        <script>
    var result =function(){
       alert(arguments.length);  //返回2
      alert(arguments[0]);
    //返回123 }; result(123,'nihjao'); </script>
    可知:在没有定义形式参数变量的情况下爱,也传过来了参数,并被arguments接受。所以arguments是一个隐藏对象

    在函数中定义形参接受参数

    var result =function(y){
        alert(y);
      alert(result.arguments[0]);  //返回123
      alert(arguments[1]);      //返回 nihao
      alert(arguments.length);    //返回 2 arguments.length是指实参长度
      alert(arguments.callee.length);  //返回1 arguments.callee.length是形参长度
    
    };
    
    result(123,'nihjao');
        </script>
    此时:函数定义了一个形参 y 接受传过来的参数,只接受第一个

    2.callee属性 返回正在执行的函数对象

      返回正在执行的function对象,也就是所指定的 Function 对象的正文。

    function calleeDemo() {
      alert(arguments.callee);
    }
    callee能够打印函数其本身
     

      callee 属性是 arguments 对象的一个成员,他表示对函数对象本身的引用,这有利于匿名函数的递归或确保函数的封装性,该属性只在函数正在执行时可用

    注意:callee拥有length属性,arguments.length是实参度, arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。

    <script type="text/javascript">
    (function(o) {
    alert(o);
    return arguments.callee;
    })('water')('down');

    </script>

    递归执行函数

    递归计算:递归计算1到n的自然数之 和?  

    var sum = function(n){
      if (n <= 0) return 1;
      else return n +arguments.callee(n - 1)
    }
    比较一般的递归函数:
    var sum = function(n){
      if (1==n) return 1;
      else return n + sum (n-1);
    }
    调用时:sum(100);

    其中函数内部包含了对sum自身的引用,函数名仅仅是个变量名,在函数内部调用sum即相当于调用一个全局变量,不能很好的体现出是调用自身,这时使用callee会是 个比较好的方法。

  • 相关阅读:
    前端好用js库
    springmvc 配置之 mvc:default-servlet-handler
    springmvc配置之mvc:annotation-driven
    spring mvc 配置之 context:annotation-config vs component-scan
    React 学习笔记
    数据结构乱写
    字符串乱写
    HEOI2020 游记
    奇怪的基础容斥数学课件
    省选模拟104 题解
  • 原文地址:https://www.cnblogs.com/jiechn/p/4076314.html
Copyright © 2020-2023  润新知