1. 程式人生 > >函數內部屬性:arguments和 this

函數內部屬性:arguments和 this

使用 指向 調用函數 class code 問題 log 實現 作用

在函數內部,有兩個特殊的對象: argumentsthisarguments是一個類數組對象,包含著傳入函數中的所有參數, 主要用途是保存函數參數。 但這個對象還有一個名叫 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,其行為與 JavaC#中的 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