在js中,function類型實際上是對象,每個函數都是function類型的一個執行個體。而且與其他參考型別一樣具有屬性和方法。
聲明
1普通方式
Function sum(num1,num2){Return num1+num2;}
2使用變數初始化函數
Var sum=function(num1,num2){Return num1+num2; }
以上兩種方式是常用的方式,當然還有其他方式,但相比還是以上更優越。
定義函數,為的就是使用方便。這裡只對內部屬性進行簡單瞭解
函數內部屬性
任何函數內部,都有兩個特殊的對象,arguments 和 this
arguments為數組對象,包含傳遞的所有參數。this是它所處對象的範圍。
arguments
例如
一個遞迴的函數調用Functionsum(num){ If(num<=1){ Return 1;}else{ Return num*box(num-1); }}
對於求和完全沒有問題,倘若函數名修改了,那麼遞迴中的函數就會報錯了。所以為瞭解決這個問題,我們可以使用函數自身的 arguments.callee 解決。
Function sum(num){If(num<=1){ Return 1;}else{Return num*arguments.callee(num-1);}}
This使用
先前認為自己理解的很到位,但是我看到以下源碼的時候還是有偏差的。
window對象是js中最大的對象,也是最外圍的。
所有全域的變數都是window的屬性。所以就有
Varcolor='紅色的'
Alert(this.color);
Alert(window.color)
兩者是相同的結果,這裡color為全域變數,所以是window的屬性。this代表的就是windows
Window.color='紅色的'
Var box={ Color:'藍色的', sysColor:function(){ Alert(this.color); }} alert(this.color);//此處的this外層是window對象,所以是windowcolorbox.sysColor();//box的color
======================================================================
Window.color='紅色的' Function sayColor(){Alert(this.color);//這裡是一個動態this,注意範圍的變化} sayColor(); Var box={Color:'藍色的'}Box.sayColor=sayColor;Box.sayColor();//藍色
以上對this的基本認識,也是最常用的範圍變換,this代表包圍它對象自身。
Call()和apply()方法
表面上他們是對其他函數的調用,但是不要被他們的表象所迷惑了,真實作用是修改函數的範圍
Var color='紅色的';Var box={Color:'藍色的';} Function sayColor(){Alert(this.color);} saycolor();//紅色sayColor.call(this);//this為window//紅色sayColorcall(box);////藍色 ;冒充box,範圍就在box對象中
Call,apply的參數為
Apply(對象範圍,參數);
函數的定義,其最後還是為調用,那麼調用的類型有哪些呢,
函數調用
1作為函數的返回值
與普通變數一樣。
function box(sum,num){returnsum+num; } function sum(num){returnnum+10;} varresult=box(sum(10),10);alert(result);
這裡我們可以看到輸出的結果是30,這裡sun返回的是一個具體的數值。
函數當做參數傳遞
對以上函數進行變型
function box(sum,num){return sum(num); } function sum(num){returnnum+10;} var result=box(sum,10);alert(result);
輸出為20,還是一個數值,但是這裡的參數sum已經不再是一個具體額的數值了,而是一個具體的函數。在box函數中,參數是一個sun函數。
小結:
該內容為funtion的內部的基本屬性和方法的認識,js的函數與其他語言的函數是很相識的,也是源於object類型,期也有this和arguments等參數組。與main函數很是相識,對比j2ee中的函數以及其他語言的屬性也是類型的,如未說明的length,property屬性等。
property原型,請參見下篇function介紹