函數內部屬性:arguments和 this
阿新 • • 發佈:2017-05-13
使用 指向 調用函數 class code 問題 log 實現 作用
在函數內部,有兩個特殊的對象: arguments和 this。 arguments是一個類數組對象,包含著傳入函數中的所有參數, 主要用途是保存函數參數。 但這個對象還有一個名叫 callee的屬性,該屬性是一個指針,指向擁有這個 arguments對象的函數 。
1 function box(num){ 2 if(num <=1 ){ 3 return 1; 4 }else{ 5 return num*box(num-1); //一個簡單的遞歸 6 } 7 } 8 alert(box(4));
對於階乘函數一般要用到遞歸算法, 所以函數內部一定會調用自身; 如果函數名不改變是沒有問題的,但一旦改變函數名,內部的自身調用需要逐一修改。為了解決這個問題,我們可以使用 arguments.callee來代替 。
function sum(num){ if(num <=1){ return 1; }else{ return num*arguments.callee(num-1);//使用arguments.callee函數,調用自身,實現遞歸 } } alert(box(4));
函數內部另一個特殊對象是 this,其行為與 Java和 C#中的 this大致相似。換句話說,this引用的是函數據以執行操作的對象, 或者說函數調用語句所處的那個作用域。
PS: 當在全局作用域中調用函數時, this對象引用的就是 window 。
// window是一個對象,而且是JS裏面最大的對象,是最外圍的對象 alert(typeof window);//window是對象,類型是object; alert(typeof this);//和window是一樣的,所以this就是window; alert(window);//輸出[object Window] alert(this);//輸出[object Window] this目前表示的是window,因為在window的範圍內
var color="red";//這裏color就是全局變量,而這個變量又是window的屬性 alert(window.color);//這裏已經很好說明color是window下的屬性 alert(this.color);//同上 alert(color);//同上
var box={ color:‘green‘, sayColor:function(){ return this.color; //等價於box.color } } alert(box.sayColor());//局部打印box對象的顏色
window.color="紅色的"; function sayColor(){ alert(this.color);//所以這裏執行是動態的,第一次是在window下的,第二次是在box下的 } sayColor();//輸出為‘紅色的‘;其實範圍是在window下的 var box={ color:"綠色的" //創建一個對象 } box.sayColor=sayColor;//追加一個對象屬性,並把sayColor函數賦給對象box.sayColor; box.sayColor();//輸出為‘綠色的‘,此時是在box的範圍下的
函數內部屬性:arguments和 this