1. 程式人生 > >TS學習之函數

TS學習之函數

arguments first str rst fun 函數 join last 實現

定義函數類型(規定函數參數及函數返回值的類型,若函數沒有返回值,則返回類型為null)

function add(x: number, y: number): number {
    return x + y
}

推斷類型(ts自動識別類型(按上下文歸類))

function add(x: number, y: number) {
    return x + y
}
//ts會自動識別出返回類型為number

可選參數,默認參數,剩余參數

  • 可選參數(參數名旁使用 ?實現可選參數的功能,可選參數放在必填參數之後)
function buildName(firstName: string, lastName?: string) {
    
if (lastName) return firstName + " " + lastName; else return firstName; } let result1 = buildName("Bob"); // Bob let result3 = buildName("Bob", "Adams"); // Bob Adams
  • 默認參數(默認參數可傳值也可不傳,一般默認參數在必須參數之後,但也可以定義在默認參數之前,但此時必須明確傳入undefined以獲取默認值)
function buildName(firstName: string, lastName: string = "Smith") {
    
return firstName + " " + lastName; } let result1 = buildName("Bob"); // Bob Smith let result3 = buildName("Bob", "Adams"); // Bob Adams
function buildName(firstName: string = "Mr", lastName: string ) {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob","Adams");  // Bob Adams
let result2 = buildName("Bob"); //
error: Expected 2 arguments, but got 1. let result3 = buildName(undefined,"Smith") //Mr Smith
  • 剩余參數(當參數個數不確定時)
function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
console.log(employeeName)   //Joseph Samuel Lucas MacKinzie

this和箭頭函數(傳統函數的this作用域是在函數調用時確定,但箭頭函數的this作用域在創建時就已經確定)

  • 傳統函數
let myobj = {
    person:["Bob","Fred","Smith"],
    myFn:function(){
        return this.person
    }
}

let test = myobj.myFn;
console.log(test()) //undefined
  • 箭頭函數
let myobj = {
    person: ["Bob", "Fred", "Smith"],
    myFn: function () {
        return () => {
           return this.person
        }
    }
}

let test = myobj.myFn();
console.log(test()) //[ ‘Bob‘, ‘Fred‘, ‘Smith‘ ]

TS學習之函數