js中的函數function
js的function對象在調用過程中具有一個arguments的屬性,它是由腳本解釋器創建的(這也是arguments創建的唯一方式)。arguments屬性可以看作是一個Array對象,它有length屬性,可以通過序號訪問每一個參數,而且通過argument的callee屬性可以獲取對正在執行的Function對象的引用。如下:
function factorial(n){ if(n<=n){ return 1; }else{ return n*arguments.callee(n-1); } } alert(factorial(5));
上麵使用了callee屬性完成了一個遞歸的算法。
Function的另一個屬性是caller,它指向正在調用當前函數的父函數對象。利用callee和caller屬性,可以很容易實現對堆棧的遍曆,如:
function fool(v1){ foo2(v1,v2,v3); } function foo2(v1,v2){ foo3(v1,v2,v2*v2); } function foo3(v1,v2,v3){ var foo=argument.callee; while(foo&&(foo!=window)){ document.writeln('<br>調用參數:<br>','-------------------------------<br>'); var args=foo.argument;argn=args.length; for(var 1=0;i<arg;i++){ document.writeln('args[',i,']:',args[i],'<br>'); } document.writeln('<br>'); foo=foo.caller; } } foo(5);
Function是js中一個很特殊的對象,其特殊體現在他的多重身份上,如:
//function作為類的聲明和實現 function ClassA(){ this.prop1="prop1"; this.prop2="prop2"; } //function作為構造函數 var obj=new CalssA(); //輸出true,function作為類引用 alert(obj instanceof CalssA);
Function可以聲明普通函數,這和其他語言的概念是一樣的,但Function還可以用於類的聲明和實現,對象的構造函數以及類的引用。上麵的代碼中通過function關鍵字聲明了ClassA類,並通過this關鍵字聲明了兩個屬性prop1和prop2,然後在創建obj對象時,ClassA()由起到了對象構造函數的作用;最後代碼中使用instanceof關鍵字判斷obj對象是否是ClassA類的實例,此時ClassA又起到了類引用的作用。
最後更新:2017-04-03 05:40:00