函數是可以被重複使用的代碼塊,它可以接受輸入參數,執行一系列操作,然後返回輸出結果。使用函數可以提高代碼的複用性,也可以將大問題拆解成小模塊,同時提高代碼的可維護行;
基本用法
- 聲明函數的格式
function 函數名(參數名1: 類型, 參數名2: 類型): 返回值類型{
....
return 返回值;
}
- 聲明函數示例
//例:聲明一個函數,接受兩個整數,然後返回兩個數的和;
function add(x:number, y: number): number{
let z = x + y;
return z;
}
- 調用函數示例
let s1 = add(3, 4) //調用add函數,求3與4的和,並把和值賦值給變量s
console.log("兩個數的和為:",s1)
let s2 = add(4, 6) //重複調用add函數
console.log("兩個數的和為:",s2)
[!Warning]
調用函數時,必須滿足以下規則:
- 聲明函數時
()中的參數叫形式參數,調用函數時()中的參數叫實際參數。- 實際參數與形式參數必須滿足從左到右順序一致、類型匹配、數量相同,否則編譯報錯。
let s2 = add(4, 6, 3)//編譯報錯
無返回值函數
函數可以沒有返回值,此時方法體內不需要寫return,返回值類型需要用void代替。
//聲明一個函數,接受兩個整數,執行求最和操作,直接和在函數內打印輸出
function max(x: number, y: number): void{
let z = x + y;
console.log("兩個數的和:",z)
}
//調用函數
max(3, 4)
max(4, 6)
無參數函數
根據需要函數可以沒有參數,此時()中什麼都不寫即可。
//聲明一個函數,打印輸出10個HarmonyOS Next
function print(){
for(let i = 0; i < 10; i++){
console.log(`HarmonyOS Next ${i}`)
}
}
//調用函數
print();
返回類型推斷
在聲明函數時可以不明確指定返回值類型,可以根據return後面的結果自動推斷返回值類型。
// 通過結果自動推斷返回值數據類型
function sub(a: number, b: number) {
return a + b; //自動推斷結果為 number類型
}
let res = sub(10, 5)
//
console.log(typeof res) // 輸出 number
箭頭函數
箭頭函數,又名Lambda表達式,它是一種比普通函數更加簡潔的函數寫法。
標準格式
let 函數名 = (參數列表): 返回值類型=>{
函數的執行代碼
return 結果
}
示例:聲明箭頭函數,求矩形的面積
//聲明箭頭函數
let rectArea = (width: number, height: number): number => { return width * height }
//調用箭頭函數
let s1: number = rectArea(100,50)
簡化格式
箭頭函數有以下幾種簡化寫法
- 箭頭函數的返回值類型可以省略,省略時返回值通過結果自動推斷。
//聲明箭頭函數
let rectArea = (width: number, height: number) => { return width * height }
//調用箭頭函數
let s1 = rectArea(100,50)
- 如果箭頭函數的函數體語句只有一條,{}、return也可以省略。
//聲明箭頭函數
let rectArea = (width: number, height: number) => width * height
//調用箭頭函數
let s2 = rectArea(100,50)
箭頭函數作為參數使用
在實際使用時,通常將箭頭函數作為另一個函數的實際參數傳遞。
// Function 表示參數的數據類型是一個函數,調用`greet(...)`時,必須傳遞一個函數。
function greet(callback: Function) {
callback(); // 調用回調函數
}
// 箭頭函數作為參數傳遞
greet(() => {
console.log("Welcome!");
})
函數類型
通過type關鍵字可以定義類型別名,可以使用type將箭頭函數定義成數據類型。
//定義函數類型,只聲明函數,不實現函數
type Handler = (a: number, b: number) => number
//Handler作為參數的數據類型
function work(a:number, b: number, handler: Handler){
return handler(a,b)
}
//調用work函數時,傳遞Handler函數的實現方式
let result1 = work(3, 4,(a,b)=>{return a+b})
console.log(`${result1}`) //7
let result2 = work(3, 4,(a,b)=>{return a*b})
console.log(`${result2}`) //12
可選參數
在參數名稱後面加上?表示參數是可選的,意思就是調用時可以傳遞參數,也可以不傳遞參數。
//定義函數,構建姓名
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName + "富貴";
}
let result1 = buildName("李"); // 正確
let result2 = buildName("李", "世明"); // 正確
可變參數
函數的最後一個參數可以是可變參數,格式為...restArgs。可變參數允許函數接收一個由剩餘實參組成的數組,類型為任意指定類型,用於處理不定數量的參數輸入。
// 需求:定義函數,求任意幾個數據的和
function sum(...numbers: number[]): number {
let sum = 0;
for (let num of numbers) {
sum += num;
}
return sum;
}
// 調用函數,傳入任意數量的參數
let res1 = sum(1, 2, 3)
console.log(`${res1}`) //輸出 6
let res2 = sum(1, 2, 3, 4, 5, 6)
console.log(`${res2}`) //輸出 21
感興趣的同學可以嘗試考取 鴻蒙開發者認證