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 宣告函式 2 呼叫函式
-
宣告函式的關鍵字是什麼? function
-
不呼叫函式,函式中的程式碼會執行嗎?不會
// 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 實參。
-
形參:宣告函式時指定的引數,放在宣告函式的小括號中(挖坑)。
function sing(songName: string) { }
語法:形參名稱: 型別註解,類似於變數宣告,但是沒有賦值。
作用:指定函式可接收的資料。
然後,就可以在函式體中,像使用變數一樣使用形參了。 -
實參:呼叫函式時傳入的引數,放在呼叫函式的小括號中(填坑)。
sing('五環之歌')
實參是一個具體的值(比如:‘字串’、18、[]等),用來賦值給形參。
形參和實參的總結:
- 宣告函式時的引數,叫什麼?作用?
形參,指定函式能夠接收什麼資料。function sing(songName: string) { }
- 呼叫函式時的引數,叫什麼?作用?
實參,是一個具體的值,用來賦值給形參。sing('五環之歌')
通過形參和實參的配合,函式可以接收動態資料,從而讓函式變得更加靈活、強大。
3.3 其他說明
-
根據具體的功能,函式引數可以有多個,引數之間使用逗號(,)來分隔。
function fn(name: string, age: number) { } fn('劉老師', 18)
-
實參和形參按照順序,一一對應。
function fn(name: string, age: number) { } fn('劉老師', 18) // name -> '劉老師', age -> 18
-
實參必須符合形參的型別要求,否則會報錯!
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 指定返回值
-
指定返回值型別
function fn(): 型別註解 { }
在宣告函式的小括號後面,通過 : 型別註解 指定。
function fn(): number { }
-
指定返回值
function fn(): 型別註解 { return 返回值 }
在函式體中,使用 return 關鍵字來返回函式執行的結果。
function fn(): number { return 18 }
注意:返回值必須符合返回值型別的型別要求,否則會報錯!
-
使用變數接收函式返回值
let result: 型別註解 = fn()
使用變數接收函式返回值的時候,相當於:直接將返回值賦值給變數。
let result: number = 18
注意:變數(result)的型別與函式(fn)的返回值型別要一致。
然後,就可以使用這個變數(返回值),繼續進行其他計算了。
-
直接使用函式呼叫的結果(返回值),進行其他計算
console.log( fn() * 10 )
總結:
-
使用哪個關鍵字來指定返回值?return
-
以下程式碼是否正確? 錯誤!因為返回值18不符合返回值型別string的要求
function foo(): string { return 18 }
-
如果函式(getSum)返回了陣列中所有元素的和,以下程式碼表示什麼? 計算兩個結果的和
getSum([1, 3, 5]) + getSum([10, 100, 1000])
4.3 return 的說明
-
將函式內部的計算結果返回。
-
終止函式程式碼執行,即:return 後面的程式碼不會執行。
function fn(): number { return 18 console.log('我不會執行,放在這,沒有意義') }
-
return 只能在函式中使用,否則會報錯。
-
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 返回值。
簡化過程:
- 輸入(引數) – 可選
- 處理(函式體)
- 輸出(返回值)-- 可選