Tips:函數的內部屬性 arguments和 this

arguments是一個類數組對象,包含這傳入函數中的所有參數。

this 簡單理解就是調用當前函數的對象

arguments.callee  ,這個屬性是一個指針,指向擁有這個arguments對象的函數

請看一個遞歸函數

function factorial(num){
            if (num <= 1) {
                return 1;
            } else {
                return num * factotial(num-1)
            }
        }

這是一個和經典的遞歸算法。但是這個函數和factoria緊緊耦合在一起,當然如果函數名不變是沒問題。

不過我們可以更好的解耦,可以這樣寫

function factorial(num){
            if (num <= 1) {
                return 1;
            } else {
                return num * arguments.callee(num-1)
            }

        }


arguments.callee.caller 保存着調用當前函數的的函數引用(只有再嵌套函數中才有值,如果再全局作用域中調用則是null)

  
        function outer(){
            inner();
        }
        
        function inner(){
            alert(inner.caller);
        }
        
        outer(); //顯示outer的源碼

同樣可以寫成

function outer(){
            inner();
        }
        
        function inner(){
            alert(arguments.callee.caller);
        }
        
        outer();



發佈了45 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章