javaString的函數類型剖析

來源:互聯網
上載者:User

javaString的函數類型剖析
javascript的函數比較豐富、和javascript的對象一樣,需要一定的積累才可以深入理解,通過函數可以體現javascript的面向過程編程思想,通過物件類型可以更好的體現面向對

象的設計思想,本節主要大概講述一下javascript的函數

 

1 函數的定義方式

javascript的函數定義分為三種:function語句形式、函數直接量形式、建構函式的形式

 

// function 語句定義函數  function+函數名+參數列表+函數體 function fun1(x,y){    return x+y; }  //執行一個函數是 fun1(3,4) 其中3,4是兩個實際參數 console.info(fun1(3,4)) //在javascript的函數比較靈活,只會根據函數名進行匹配,和實際參數個數無關,同樣返回7  console.info(fun1(3,4,5,6))  //函數直接量 這種方式用的較多 定義一個變數,直接賦值一個函數 var func2=function(x,y,z){ return x+y+z } //執行一個函數 console.info(func2('a','b',4))  //第三種形式 建構函式的形式 如果有傳回值,必須放在最後一個參數,而且最好加上分號,對於形式參數需要使用引號 //建構函式沒有函數體,是頂級範圍,與前兩種方式不同 var func3=new Function('x','y','return x+y') //執行函數  console.info(func3(3,5))

 

2 arguments參數

 

主要兩個作用,1、擷取實際參數、2、可以遞迴調用自己

 

//對於通過function定義函數、函數直接量定義的函數,都有一個特定的隱藏對象arguiments //需要注意的是通過頂級範圍的建構函式Function 定義的函數是沒有arguments對象 //1 arguments作用一,接受函數的實際參數,可以擷取實際參數的長度,具體的實際參數 //對於arguments的使用需要在函數體中 var fun4=function(){ Ext.Msg.alert('實際參數長度',arguments.length) Ext.Msg.alert('第一個參數值',arguments[0]) return 1; } console.info(fun4(1,2,3,4))})//2 arguments作用二,用於函數的遞迴操作// 求一個數的階乘 function fun5(x){ if(x==1){ return 1; }else{ // 一般可以這樣寫,但是不夠嚴謹 return x*fun5(x-1) //最標準的寫法 return x*arguments.callee(x-1)  }  }

 

3 閉包

 

主要需要理解的概念執行環境、範圍鏈、js記憶體回收

主要的作用是避免使用全域變數

 

//函數碰到return直接返回、沒有renturn 返回結果undefined//在javascript語言裡: 更不提倡使用全域變數 (1:不安全、2:做變數搜尋尋找的時候效率比較低)//通過閉包可以保留具備變數的值//避免使用全域變數 點擊按鈕 統計點擊的次數var inp=function(){var i=0;return {  getCount:function(){  alert(++i);  }}}()


 

4 區別

 

 

//函數定義的區別 // 通過function語句定義的,會在執行javascript代碼前優先載入 function定義的函數 // 通過函數直接量、建構函式定義的則會從上到下依次執行 // 1 示範在代碼中先執行函數,後定義函數 //執行函數代碼 //這段代碼不會報錯,因為function定義的函數優先載入 console.info(fun6(4,5)); function fun6(x,y){ return x*y } // 使用函數直接量,則報錯undefined/* console.info(fun7(4,5)); var fun7=function (x,y){ return x*y }*/  //使用建構函式,同樣報錯undefined /* console.info(fun8(6,7)); var fun8=new Function('x','y','return x+y;')*/ //範圍區別// 通過建構函式建立,具有頂級範圍,只能取window對象定義的變數,全域變數  var b=1  function test(){   var b=2   // 這種方式優選局部變數,然後才是全域變數    var f=function(){return b};   alert(f())   // 只能與全域變數   var s=new Function("return b;")   alert(s())  } console.info(test())

 

5 apply call函數

 

call apply 主要作用是綁定範圍

this 關鍵字,在javascript中,總是指向調用者,誰調用函數,this就指向誰

apply第一個參數是對象,第二個參數是數組表示實際參數

call 第一個參數是對象,後面是實際參數

 

 // call apply 主要作用是綁定範圍 // this 關鍵字,在javascript中,總是指向調用者,誰調用函數,this就指向誰  //這個變數是屬於window的,全域變數 var color='red'  // 定義一個obj,對象,有一個color屬性 var obj={'color':'blue'}  var fun12=function(x,y,z){ //指向調用者的color屬性    alert(this.color)    return x+y+z } // window 調用,返回red fun12(); //obj對象調用,返回blue //call 第一個參數是對象,後面是實際參數console.info(fun12.call(obj,1,2,3))// apply第一個參數是對象,第二個參數是數組表示實際參數console.info(fun12.apply(obj,[1,2,4]))



 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.