javascript的函数arguments属性和callee调用递归

原创 2013年12月05日 18:01:51
 arguments属性:      
        function fn1(){
            
          alert(arguments.length);            //可以写成这种形式
          alert(fn1.arguments.length);        //也可以写成这种形式,不能写成this.arguments
                                              //在此var fn1是一个函数,
                                              //js函数是个特殊的对象,
         for(var i=0;i<arguments.length;i++){ //与其他对象,有明显的区别,
                                              //可以理解成function标识着 fn1
                                              //这个对象继承了对象
           alert(arguments[i]);               //Function,为什么不能使用this.arguments呢,
                                              //因为函数在浏览器中直接使用
         }                                    //fn1()的方式调用等同于window.fn1(); 
                                              //在这里this指的是window对象
      }                    
        //arguments可以获得所有传递的参数,arguments倒底是不是对象呢,
        //在js中才真正是万物皆对象,所以arguments是
        //是Function对象的内在属性,但如果一旦调用,就可以形成一个独立的对象,
        //js中对象可以是属性,属性也可以是对象
        fn1(11,23,34); //结果为3
        
  Js递归问题:
        function fn1(arg){
            if(arg == 1){
                return 1;
            }
            return arg*fn1(arg-1);
        }
        
        var fn2 = fn1  //将fn1复制到fn2的空间里面一份
        alert(fn2(5))  //结果120
        fn1 = null;        //将断掉fn1以前指向的空间,空间没有被指向后回收
        alert(fn2(5))    //如果从函数的特殊性来说,fn2调用自己的空间匿名函数,不会出错,但由于
                        //递归的时候函数里面还有个自己调用自己,错误就出在这里
                        //此时出错,原因是fn2会调用自己空间里面的
                        //函数,可以吧fn2空间里面的函数看成没有函数名的匿名函数
                        //fn2--> function (arg){  
                        //            if(arg == 1){
                        //                return 1;                
                        //            }
                        //            return fn1(arg-1)*arg;  
                        //        }                                                
                        //在这个函数中仍然有指向fn1的地方,当fn1=null ,以后就会出错

解决:
        function fn1(arg){
            if(arg == 1){
                return 1;
            }
            return arg*arguments.callee(arg-1);  
            //此时就没有问题了,callee动态监测自己所在的函数的函数名,来调用
        }
        
        var fn2 = fn1  
        alert(fn2(5))  
        fn1 = null;        
        alert(fn2(5))    





Javascript 严格模式详解 strict 模式

今天使用jquery.validat3 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascri...
  • airingyuan
  • airingyuan
  • 2014年05月05日 11:21
  • 8941

js函数形参、实参、arguments[]的一探究竟

*先声明下:
  • yjmwkxz
  • yjmwkxz
  • 2014年10月18日 21:08
  • 2667

前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

前端总结系列 前端总结·基础篇·CSS(一)布局前端总结·基础篇·CSS(二)视觉前端总结·基础篇·CSS(三)补充前端总结·基础篇·JS(一)原型、原型链、构造函数和字符串(String)前端...
  • tmchongye
  • tmchongye
  • 2017年03月18日 04:31
  • 3498

js函数的实参对象arguments 和其2个属性callee、caller

当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值。因此,应当给省略的参数赋一个合理的默认值。   //将对象o中可枚举的属性名追加到数组a中,并...
  • github_26672553
  • github_26672553
  • 2015年12月04日 15:19
  • 315

【JS--基础--函数】--隐含参数对象arguments的callee 属性

callee: 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。   [function.]arguments.callee   可选项 function ...
  • Beiji_Nanji
  • Beiji_Nanji
  • 2012年05月20日 17:54
  • 526

javascript 函数 function arguments caller callee apply() call()

在JavaScript中,函数
  • BruceBaoZhiqiang
  • BruceBaoZhiqiang
  • 2014年05月05日 17:11
  • 808

js中arguments.callee在递归函数中的妙用

在很多语言的面向对象编程中,this关键字代表的是"这个类的",比如下面的php代码: 要给类的属性赋值(或进行其他操作),就要使用this关键字,可以形象的理解为"给我这个类的属性(变量)赋值,而...
  • qlzx_syzx
  • qlzx_syzx
  • 2016年07月18日 23:30
  • 3367

arguments.callee 等js高手采用的属性

一、Arguments 该对象代表正在执行的函数和调用他的函数的参数。 [function.]arguments[n] 参数function :选项。当前正在执行的 Function 对象的名字...
  • fengg5241
  • fengg5241
  • 2012年04月18日 16:51
  • 516

javascript arguments(callee、caller)

arguments calle caller
  • likaixuan1998
  • likaixuan1998
  • 2016年10月23日 00:18
  • 382

理解JavaScript中的arguments,callee,caller,apply

arguments 该对象代表正在执行的函数和调用它的函数的参数。 [function.]arguments[n] 参数function :选项。当前正在执行的 Function 对象的名字。 ...
  • lingjiuhun
  • lingjiuhun
  • 2012年11月13日 15:13
  • 313
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript的函数arguments属性和callee调用递归
举报原因:
原因补充:

(最多只允许输入30个字)