天天看點

javascript基礎篇--function類型(上)

javascript基礎篇--function類型(上)

在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對象,是以是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介紹