函數內部的屬性: 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的效果