《HTML教程》-5.5-5.6教學材料_第1頁
《HTML教程》-5.5-5.6教學材料_第2頁
《HTML教程》-5.5-5.6教學材料_第3頁
《HTML教程》-5.5-5.6教學材料_第4頁
《HTML教程》-5.5-5.6教學材料_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

5.5.1函數(shù)定義

JS的函數(shù)定義有幾種方式,下面分別介紹。格式1:functionfunName([<參數(shù)列表>]){ //函數(shù)體,即實現(xiàn)功能的代碼。}◆function為關鍵字,不能改變。

◆圓括號()是必須的,不能省略,其中為參數(shù)列表。◆funName為函數(shù)名,必須是一個合法的JavaScript標識符。在實際應用中函數(shù)名應該見名知義,不能是無意義的字符串。

◆參數(shù)列表中的多個參數(shù)以逗號(,)分隔。參數(shù)列表是可選的,函數(shù)可以沒有參數(shù)。

◆花括號{}是函數(shù)體,也是必須的。函數(shù)中所有的代碼都寫在花括號中。格式2:

varfunName=function([<參數(shù)列表>]){//函數(shù)體};這里定義了一個匿名函數(shù),并把它賦給變量funName,funName就相當于函數(shù)名,可以通過funName調用這個匿名函數(shù)。嚴格說來這不是函數(shù)的定義,而是一條函數(shù)定義語句,所以最后的分號(;)不能省略。這里的funName也可以是對象的屬性,此時的函數(shù)稱為對象的方法。格式3:

varfunName=newFunction([‘參數(shù)1’[,‘參數(shù)2’,…]],‘函數(shù)體’);其中,F(xiàn)unction為JavaScript的關鍵字,現(xiàn)舉例如下:varadd=newFunction('x','y','returnx+y');這就定義了一個名為add的函數(shù),實現(xiàn)兩個參數(shù)的相加。格式4:箭頭函數(shù)

這種定義函數(shù)的方式是ECMAScript6新增的函數(shù)定義方法。主要是便于書寫,而且對于函數(shù)執(zhí)行上下文this界定也十分清晰。執(zhí)行上下文this以字面編寫的代碼為界,出現(xiàn)在什么地方,那里就是它的上下文。箭頭函數(shù)不能訪問arguments參數(shù)對象,而且不能使用new關鍵字創(chuàng)建對象。箭頭函數(shù)定義格式如下:參數(shù)=>表達式;或者([<參數(shù)列表>])=>{//語句塊(函數(shù)體)}關于箭頭函數(shù)this的用法說明見清單5-5。5.5.2函數(shù)調用

函數(shù)調用非常簡單,只需要函數(shù)名加上圓括號,在圓括號中寫上實際參數(shù)即可。格式如下:函數(shù)名([<實參列表>]);或者對象名.方法名([<實參列表>]);//以對象方法的形式調用函數(shù)但是函數(shù)調用時實參與形參的對應關系比較奇怪。在JS中函數(shù)調用中,實際參數(shù)與形式參數(shù)不一定一一對應。實際參數(shù)可能少于、等于或多于形式參數(shù)的個數(shù)。

◆實際參數(shù)少于形式參數(shù)時,缺少的形式參數(shù)以undefined代替。

◆實際參數(shù)多于形式參數(shù)時,多余的參數(shù)存入arguments對象。

◆類型不同時會發(fā)生自動類型轉換。函數(shù)調用中另一個比較重要的問題就是調用上下文,用this表示。調用上下文有許多屬性和方法可以在函數(shù)執(zhí)行時調用。JavaScript中運行上下文,即this關鍵字有以下幾種情況:

◆非嚴格模式下,上下文this為全局對象。

◆嚴格模式下,上下文this為undefined。

◆函數(shù)作為對象的方法時,上下文為對象本身。全局對象的方法和屬性4.3.4節(jié)已簡單論述,詳細可以參考文獻[24],這里不再詳細討論。關于JS的this是一個比較復雜的話題,這里就不展開討論了。還有一種函數(shù)調用是內聯(lián)函數(shù)調用,即函數(shù)的聲明與調用同時進行。這種調用調用方式適用于只使用一次的函數(shù),沒必要再取函數(shù)名,也不需要專門的調用,在函數(shù)定義的同時就進行調用了。如(function(a,b){return(a+b);})(1,2);5.5.3參數(shù)處理

JavaScript中的參數(shù)是比較有特色的,與其他編程語言大不相同。除了實際參數(shù)與形式參數(shù)個數(shù)可以不一致外,還有以下特征。(1)默認參數(shù)默認參數(shù)是指在函數(shù)定義時給形式參數(shù)賦初值,函數(shù)調用時如果傳遞了實際參數(shù),則使用實際參數(shù)的值,若沒有傳遞實際參數(shù),則使用指定的初始值。如functiongreeting(msg="hello",name="程繼洪"){ returnmsg+name;}這里的msg和name都是缺省參數(shù),都有自己的缺省值。主要用在程序需要參數(shù)值,而調用者可能忽略參數(shù)的情況??梢员苊鈾z查參數(shù)對象arguments.length是否為零,以及參數(shù)是否為undefined,提高程序的健壯性。(2)Rest參數(shù)

Rest參數(shù)直譯過來就是“剩余參數(shù)”,在JavaScript中用連續(xù)的3個點號(...)表示,它可以接收多個參數(shù)。Rest參數(shù)實質上是參數(shù)數(shù)組,可以調用它的數(shù)組相關方法。語法格式如下面的實例所示。functionrestDemo(x,...y){ out(y);//out為自定義的輸出函數(shù) //Rest參數(shù)y可看作數(shù)組 returnx*y.length;}(3)Spread操作符

Spread操作符與Rest參數(shù)作用正好相反,Rest函數(shù)將多個獨立的參數(shù)組合成一個數(shù)組,而Spread操作則將一個數(shù)組拆分成若干個獨立的參數(shù)/元素。Spread操作符也是用3個連續(xù)的點號(...)表示。Spread操作符不只是用在函數(shù)參數(shù)中,也可以用在其他需要把數(shù)組拆分的場合。舉例如下:functionadd(a,b){ returna+b;}add(...[4,5]);//相當于add(4,5);這個例子貌似有點畫蛇添足了,但把數(shù)組拆分成獨立元素的時候,Spread操作符是非常簡單而有用的。再如下面的例子:leta=[2,3,4];letb=[1,...a,5];則b數(shù)組的內容為[1,2,3,4,5],是不是很簡單呢?關于函數(shù)的內容,我們把所有知識點總結成一個實例,代碼如清單5-5所示,所有代碼在隨書源碼的Listing5-5.html中,結合前面的講解和代碼注釋很容易就能看明白。下面再說一些重要內容和難點再作一下說明。

◆函數(shù)調用時實際參數(shù)與與形式數(shù)的個數(shù)、類型和順序可以不對應。對于缺少的參數(shù)賦值為undefined,多余的參數(shù)(包含與形式參數(shù)對應的實際參數(shù))放入arguments對象中,如果類型不匹配,則進行自動類型轉換。遍歷函數(shù)所有參數(shù)的方法如下:for(varpofarguments){ document.write(p+",");};

◆關于函數(shù)執(zhí)行上下文this,是比較難于理解的。它與Java語句的this不同,是可以變化的,雖然這里我們不展開討論關于this的話題,以下最基本的幾點還是要掌握。(function(){ out(this.parseInt("33.3"));})();這個匿名函數(shù)是獨立定義的函數(shù),非嚴格模式下,它的執(zhí)行上下文this指向全局對象。parseInt()是全局對象的方法,所以這里可以正常執(zhí)行,把字符串“33.3”轉換成整數(shù)。而在嚴格模式下,this指向undefined,所以下面的代碼為錯誤代碼,無法正常執(zhí)行。(function(){ 'usestrict'; //錯誤,此時this為undefined out(this.parseInt("44.4"));})();下面的匿名函數(shù)作為對象p的方法,所以它的this就是對象p,可以通過this訪問對象p的name屬性。varp={name:"程繼洪"}; p.hello=function(){ out("Hello"+);};p.hello();◆Rest參數(shù)將對應的多個參數(shù)包裝成一個數(shù)組,所以可以對Rest參數(shù)調用關于數(shù)組的方法。對于下面的代碼functionrestDemo(x,...y){ out(y); //y是一個數(shù)組 returnx*y.length;}out(restDemo(3,'hello',true)===6);參數(shù)y是一個Rest參數(shù),調用中傳遞的參數(shù)為'hello'和true,所以y.length的值為2。在函數(shù)體中可以通過遍歷數(shù)組的方式使用Rest參數(shù)中的每個參數(shù)值?!鬿ut(add(...[4,5]));代碼中用到了Spread操作符,也就相當于out(add(4,5));。5.6總結恭喜你又前進了一步,學會了JS的對象、數(shù)組和函數(shù)。在本章

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論