一.箭頭函數和普通函數的區別:
1.普通函數中的this:
代表它的直接調用者(js的this是執行上下文), 例如 obj.cal() ,那麼cal()方法中的this就是obj
若沒找到直接調用者,則this指的是 window (常見的window的屬性和方法有: alert, location,document,parseInt,setTimeout,setInterval等)或者 undefined
上圖 普通函數 代碼解析:
getFullName( )方法的直接調用者是Person對象,所以”1 -- >”位置輸出如圖;
fn( )方法沒有直接調用者對吧,所以“2-->位置”輸出了一個 window對象
fn( )中this.firstName,this.lastName爲 NaN
2.箭頭函數中的this:
箭頭函數沒有自己的this, 它的this是繼承而來; 默認指向在定義它時所處的
對象(宿主對象)
您就記住這句話:箭頭函數中的this指向外層調用者
上圖 箭頭函數 代碼解析:
getFullName( )方法的直接調用者是Person對象,所以”1 -- >”位置輸出如圖;
fn( )這個箭頭函數方法的外層調用者還是Peoson對象,所以“2-->位置”的是外層調用者Person對象的信息
返回的是return fn()函數 返回“3-->”中的 ‘hello’+’world’ 即helloworld
所以:
1.普通函數中的this指向 它的直接調用者
箭頭函數中的this指向 它的外層調用者
2.什麼時候使用箭頭函數函數?
當把一個函數的結果(返回值)作爲另一個函數的參數的時候
您發現了麼 鉤子函數作爲方法的參數比如上圖中的 fn( )方法的參數就是 “3-->”中的 this.firstname+this.lastname 即’helloworld’
-----------------------------------分割線------------------------------
二.箭頭函數基礎語法詳情:
1.聲明:普通函數 | 鉤子函數
2.當函數參數只有一個,括號可以省略;但是沒有參數時,括號不可以省略。
3.箭頭函數相當於匿名函數,並且簡化了函數定義。箭頭函數有兩種格式,一種只包含一個表達式,省略掉了{ ... }和return。還有一種可以包含多條語句,這時候就不能省略{ ... }和return
4.如果返回一個對象,需要特別注意,如果是單表達式要返回自定義對象,不寫括號會報錯,因爲和函數體的{ ... }有語法衝突。注意,用小括號包含大括號則是對象的定義,而非函數主體。