1. 程式人生 > 其它 >TypeScript:函式基礎

TypeScript:函式基礎

1. 函式概述

需求:計算陣列nums中所有元素的和。

let nums: number[] = [1, 3, 5]

let sum: number = 0
for (let i: number = 0; i < nums.length; i++) {
	sum += nums[i]
}
console.log(sum)

問題:如果還要計算其他陣列(nums2)中所有元素的和呢? 拷貝一份程式碼,修改

let nums2: number[] = [2, 4, 6]

存在的問題:相似的程式碼重複寫,程式碼冗餘。

正確的姿勢:使用函式包裝(封裝)相似的程式碼,在需要的時候呼叫函式,相似的程式碼不再重複寫。

function getSum(nums: number[]) {
	let sum: number = 0
	for (let i: number = 0; i < nums.length; i++) {
		sum += nums[i]
	}
	console.log(sum)
}

getSum(nums1) // 計算nums1中所有元素的和
getSum(nums2) // 計算nums2中所有元素的和

所謂函式,就是宣告一次但卻可以呼叫任意多次的一段程式碼

意義:實現程式碼複用,提升開發效率。

封裝:將一段程式碼包裝起來,隱藏細節。

2. 函式使用

函式的使用分為兩步:1 宣告函式 2 呼叫函式 (類比變數)。

  • 第一步:宣告函式

    function 函式名稱() {
    	函式體
    }
    

    解釋:
    函式名稱:推薦以動詞開頭,因為函式表示做一件事情,實現一個功能。
    函式體:表示要實現功能的程式碼,複用的程式碼。

  • 第二步:呼叫函式

    函式名稱()
    

    比如,呼叫 sing 函式:

    sing()
    

    注意:只有呼叫函式後,函式中的程式碼才會執行。

總結:

  1. 函式的基本使用分為哪兩步? 1 宣告函式 2 呼叫函式

  2. 宣告函式的關鍵字是什麼? function

  3. 不呼叫函式,函式中的程式碼會執行嗎?不會

// 1 宣告函式
function sing() {
console.log('五環之歌')
}
// 2 呼叫函式
sing
()

3. 函式引數

3.1 概述

需求:讓唱歌的函式(sing),每次呼叫時,“唱”不同的歌。

function sing() {
	console.log('五環之歌')
}
sing() // 五環之歌
sing() // 五環之歌

原因:函式(sing)中歌曲名稱是固定值。

存在的問題:函式(sing)只能“唱”固定的歌,太死板,沒有體現出函式複用的靈活性。

使用函式引數來實現:

// 呼叫函式時,告訴函式要唱的歌曲名稱
sing('五環之歌')
sing('探清水河')
// 宣告函式時,接收傳入的歌曲名稱
function sing(songName: string) {
	console.log(songName)
}

函式(sing)中歌曲名稱:固定值 → 動態傳入的值。

函式引數的作用:增加了函式的靈活性通用性,針對相同的功能,能夠適應更多的資料(值)。

3.2 形參和實參

函式引數分為兩部分:1 形參 2 實參。

  1. 形參:宣告函式時指定的引數,放在宣告函式的小括號中(挖坑)。

    function sing(songName: string) { }
    

     語法:形參名稱: 型別註解,類似於變數宣告,但是沒有賦值。
     作用:指定函式可接收的資料。
    然後,就可以在函式體中,像使用變數一樣使用形參了。

  2. 實參:呼叫函式時傳入的引數,放在呼叫函式的小括號中(填坑)。

    sing('五環之歌')
    

     實參是一個具體的值(比如:‘字串’、18、[]等),用來賦值給形參。

形參和實參的總結:

  • 宣告函式時的引數,叫什麼?作用?
    形參,指定函式能夠接收什麼資料。
    function sing(songName: string) { }
    
  • 呼叫函式時的引數,叫什麼?作用?
    實參,是一個具體的值,用來賦值給形參。
    sing('五環之歌')
    

通過形參和實參的配合,函式可以接收動態資料,從而讓函式變得更加靈活、強大。

3.3 其他說明

  1. 根據具體的功能,函式引數可以有多個,引數之間使用逗號(,)來分隔。

    function fn(name: string, age: number) { }
    fn('劉老師', 18)
    
  2. 實參和形參按照順序,一一對應。

    function fn(name: string, age: number) { }
    fn('劉老師', 18) // name -> '劉老師', age -> 18
    
  3. 實參必須符合形參的型別要求,否則會報錯!

    function sing(songName: string) {}
    sing(18) // 報錯! 形參要求是 string 型別,但是,實參是 number 型別。
    

技巧:呼叫函式時,滑鼠放在函式名稱上,會顯示該函式的引數以及型別。

總結:

  • 函式形參是 string 型別,呼叫該函式時傳入 18 對嗎? 不對,因為實參不符合形參的型別要求逗號

  • 函式有多個引數時,多個引數之間用什麼符號分隔?

  • 以下程式碼會報錯嗎?

    function sing(songName: string) { }
    sing()// 報錯!
    

    報錯!因為函式sing要求有一個引數,但是沒有傳

4. 函式返回值

4.1 概述

函式返回值的作用:將函式內部計算的結果返回,以便於使用該結果繼續參與其他的計算。

需求:計算以下兩次呼叫結果的和。

getSum([1, 3, 5]) // 9
getSum([10, 100, 1000]) // 1110
getSum([1, 3, 5]) + getSum([10, 100, 1000]) // 9 + 1110 => 1119

關鍵點:拿到函式(getSum)內部計算出來的結果,然後,才能進行後續的加法計算。

注意:如果沒有指定函式的返回值,那麼,函式返回值的預設型別為 void(空,什麼都沒有)。

4.2 基本使用

步驟:1 指定返回值型別 2 指定返回值

  1. 指定返回值型別

    function fn(): 型別註解 {
    
    }
    

    在宣告函式的小括號後面,通過 : 型別註解 指定。

    function fn(): number {
    
    }
    
  2. 指定返回值

    function fn(): 型別註解 {
    	return 返回值
    }
    

    在函式體中,使用 return 關鍵字來返回函式執行的結果。

    function fn(): number {
    	return 18
    }
    

    注意:返回值必須符合返回值型別的型別要求,否則會報錯!

  3. 使用變數接收函式返回值

    let result: 型別註解 = fn()
    

    使用變數接收函式返回值的時候,相當於:直接將返回值賦值給變數。

    let result: number = 18
    

    注意:變數(result)的型別與函式(fn)的返回值型別要一致。

    然後,就可以使用這個變數(返回值),繼續進行其他計算了。

  4. 直接使用函式呼叫的結果(返回值),進行其他計算

    console.log( fn() * 10 )
    

總結:

  • 使用哪個關鍵字來指定返回值?return

  • 以下程式碼是否正確? 錯誤!因為返回值18不符合返回值型別string的要求

    function foo(): string {
    	return 18
    }
    
  • 如果函式(getSum)返回了陣列中所有元素的和,以下程式碼表示什麼? 計算兩個結果的和

    getSum([1, 3, 5]) + getSum([10, 100, 1000])
    

4.3 return 的說明

  1. 將函式內部的計算結果返回。

  2. 終止函式程式碼執行,即:return 後面的程式碼不會執行。

    function fn(): number {
    	return 18
    	console.log('我不會執行,放在這,沒有意義')
    }
    
  3. return 只能在函式中使用,否則會報錯。

  4. return 可以單獨使用(後面可以不跟內容),用來刻意終止函式的執行。

    function play(age: number): void {
    	if (age < 18) {
    		return
    	}
    	console.log('網咖上網好爽啊,王者、吃雞兩不誤')
    }
    
    play(16) // 情況1:進入if後return,後續程式碼不執行
    play(20) // 情況2:不進if,直接列印內容: 網咖上網好爽啊,王者、吃雞兩不誤
    

注意:如果函式沒有返回值,預設返回值型別是:void(空),可省略不寫。

function play(age: number) { /* ... */ }

return 的總結:

  • 能否在函式外面使用 return? 不能
  • return 後面的程式碼會執行嗎?不會執行
  • return 後面不跟內容,單獨使用,表示什麼? 刻意終止函式程式碼執行
  • 函式沒有返回值,預設返回值型別是什麼?void

5. 函式基礎總結

函式,即:宣告一次但卻可以呼叫任意多次的一段程式碼

通過將要實現的功能,使用函式封裝起來,實現程式碼複用,提升開發效率。

函式的三種主要內容: 1 引數 2 函式體 3 返回值。

簡化過程:

  1. 輸入(引數) – 可選
  2. 處理(函式體)
  3. 輸出(返回值)-- 可選

在這裡插入圖片描述