首页 > 代码库 > js基础知识总结:函数

js基础知识总结:函数

函数内部的属性:arguments 和this是函数内部的两个特殊对象arguments:function recursion(num){    if(num<=1){        return 1;    }else{        return num*recursion(num-1);    }}另一种写法:function recursion(num){    if(num<=1){        return 1;    }else{        return num*arguments.callee(num-1);    }}arguments:表示当前参数的数组arguments.callee 表示引用当前正在正在执行的函数,或者说是调用arguments.callee的函数的引用,arguments.callee给匿名函数提供了一种自我引用的方式var func=function(){    alert(func===arguments.callee);}func();//调用该函数,我们得出的结果是true从该例子我们可以看出func和arguments.callee对象的类型和值都相等。callee属性的初始值就是正在执行的Function对象caller:    返回一个对函数的引用,该函数调用了当前函数    this 对象:    this对象引用的是window(windwo是一个对象,而且是js当中最大的一个对象    ,并且它是最外围的对象)    alert(window);//[object window]    alert(typeof window);//object    window 是对象 类型是对象 表示全局        alert(this); // [object Window]  this 目前表示的是window,因为在window的范围下    alert(typeof this);//object        alert(this===window);//返回值为 true    在“全局”变量下的this 就是window        window.color=‘红色的‘;        function sayColor(){        //alert(this);// [object window]        alert(this.color);//因为该函数 sayColor() 未赋值给一个对象 所以此处的this依然代表着window对象    }    sayColor();// 调用的是window下的color    var box={        color:‘蓝色的‘    };    box.sayColor=sayColor;将sayColor函数赋值给了 box对象的sayColor属性    /*        上边的代码其实就相当于        var box={            color:‘蓝色的‘,            sayColor:function(){                //alert(this);// [object Object]                alert(this.color);            }        };    */    box.sayColor();//此处执行的是box里边的this.color    //结果是 蓝色的    --------------------------------------------<script type="text/javascript">function box(num1,num2){    return num1+num2;}//可以使用这种方式将sum函数转换成 box方法function sum(num1,num2){    return box.apply(this,[num1,num2]);//此处的this指的是window对象(将this换成window也是一样的),数组表示的是传递的参数}alert(sum(19,21));//返回的结果是40->函数apply:    语法:apply[[thisObj],[argArray]]    定义:应用某一个对象的一个方法,用一个对象替换当前对象    thisObj代表某一个对象 上述例子中这个对象是当前对象 this    argArray表示用来替换当前对象的的对象的参数 数组上述例子的另一个中写法function sum2(num1,num2){ return box.apply(this,arguments);//arguments代表的是box函数中参数的数组}alert(sum2(10,10));    ->使用apply和call可以冒充另一个方法    apply与call实现的效果是一样的     call和apply不同的是 call中的参数是一个一个的,而apply则必须以数组的形式传递function sum(num1,num2){    return box.call(this,num1,num2);//注意参数的传递方式和apply的不同之处}    alert(sum(10,10)); 冒充的作用:主要用于扩展函数赖以运行的作用域  /*    var color=‘红色‘;        var box={        color:‘蓝色‘    };    function sayColor(){        alert(this.color);    }    //使用call 冒充 window对象    sayColor.call(window);//红色  弹出的是window对象的 color     sayColor.call(this);// 红色   弹出的样式window对象的color        //使用call 冒充 box对象    sayColor.call(box);//蓝色 弹出的是 box对象下的color属性     */  此时 可以看出 并没有给box对象添加 sayColor属性对象却可以执行出 sayColor的效果
View Code