vcD4KPHA+1Npqc9bQo6xmdW5jdGlvbsDg0M3KtbzKyc/Kx7bUz/OjrMO/uPa6r8r9trzKx2Z1bmN0aW9uwODQzbXE0ru49sq1wP2ho7b4x9LT68bky/vS/dPDwODQzdK70fm+39PQyvTQ1LrNt723qKGjPC9wPgo8cD4gPC9wPgo8aDI+yfnD9zwvaDI+Cjxicj4KCjxwPjxzdHJvbmc+McbVzai3vcq9PC9zdHJvbmc+PC9wPgo8cD48c3Ryb25nPjxicj4KPC9zdHJvbmc+PC9wPgo8cCBsYW5nPQ==”en-US”>
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對象,所以是windowcolor box.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介紹