前言
有一定Android基礎(chǔ)初學(xué)RN,但是有沒有過多的接觸lambda表達(dá)式畦徘,在學(xué)寫的過程中會看到很多使用=>的代碼担扑,不清楚=>的意義以及用法對于學(xué)習(xí)RN有一定的困惑,今天一邊學(xué)習(xí)一邊記錄一下=>的意義和用法税肪。
如果想更深入了解,可以自行搜索箭頭函數(shù)和lambda表達(dá)式
ES6允許使用“箭頭”(=>)定義函數(shù)榜田。而JavaScript中益兄,函數(shù)其實也是對象,函數(shù)名是函數(shù)的引用串慰,函數(shù)本身就是一個變量偏塞,而且JavaScript函數(shù)的聲明是沒有返回值類型這一個說法。
箭頭函數(shù)實際上是定義了一個臨時的函數(shù)邦鲫,箭頭函數(shù)的箭頭=>之前是一個空括號、單個的參數(shù)名神汹、或用括號括起的多個參數(shù)名庆捺,而箭頭之后可以是一個表達(dá)式(作為函數(shù)的返回值),或者是用花括號括起的函數(shù)體(需要自行通過return來返回值屁魏,否則返回的是undefined)滔以。
關(guān)于箭頭函數(shù)的定義,主要有以下幾點:
定義變量
var str = () => '調(diào)用我之后直接返回該字符串';
直接定義一個函數(shù)-不帶參數(shù)
var testF= ()=>{
console.log(‘123456789’)
}
上面定位一個函數(shù)testF氓拼,其作用是打印‘12345789’你画,在其他地方調(diào)用時直接調(diào)用testF即可,如下:
ps:如果在函數(shù)在class內(nèi)定義桃漾,如
_onPressButton () ?{
console.log("You 點擊了 the button!");
}
在調(diào)用的時候需要使用使用this._onPressButton坏匪,如下:
onLongPress={this._onPressButton}
同時如果使用
onLongPress={this._onPressButton()}
會在程序一加載的時候執(zhí)行了_onPressButton方法(此處還沒有徹底清楚,后續(xù)繼續(xù)研究)
帶參數(shù)的函數(shù)
var testF2= i=>{
console.log(i)
}
var testF2= (i)=>{
console.log(i)
}
var addString= (num1,num2)=>{
return num1+num2;
}
其中是否使用return取決于當(dāng)前方法是否對外提供執(zhí)行后的結(jié)果還是純執(zhí)行一下代碼邏輯即可撬统。
定義函數(shù)返回對象
上面使用到{}适滓,大括號被解釋為代碼塊,有點像java匿名內(nèi)部類的代碼塊一樣恋追,如果需要定義返回對象凭迹,需要使用()進(jìn)行包括罚屋,如下:
var getUserInfo1= ()=>({name:'zhangsan',age:12,class:6})
var getUserInfo2= (id)=>({name:'zhangsan',age:12,class:6,id:id})
var getUserInfo3= (id)=>{
return{name:'zhangsan',age:12,class:6,id:id}
}
以上分別是帶參數(shù)和不帶參數(shù)的兩種方式(getUserInfo2和getUserInfo2效果相同)。
寫上述的定義方法嗅绸,其實是為了解釋像java 使用匿名內(nèi)部類那樣使用箭頭函數(shù)脾猛,使用方法其實就是將第一個等號及其前面的去掉,直接寫在需要調(diào)用的地方即可鱼鸠,具體如下:
注意事項
1尖滚、箭頭函數(shù)沒有他自己的this值,它里面使用過的this繼承自外圍作用域瞧柔。
2漆弄、因為第一點,所以箭頭函數(shù)不能作為構(gòu)造函數(shù)
3造锅、不能使用方法中自帶的arguments對象(arguments實際上是當(dāng)前函數(shù)的一個內(nèi)置屬性撼唾,類似array,會將方法中的參數(shù)存起來)
關(guān)于箭頭函數(shù)的其他諸如函數(shù)綁定(ES7語法)等哥蔚,目前不是很了解倒谷,暫不過多敘述。
關(guān)于this的作用糙箍,也了解不甚多渤愁,只知道
長期以來,JavaScript語言的this對象一直是一個令人頭痛的問題深夯,在對象方法中使用this抖格,必須非常小心。
ps:如果箭頭函數(shù)中套用箭頭函數(shù)咕晋,會是什么樣呢雹拄?
結(jié)果是:I/ReactNativeJS(26113): [Function]
關(guān)于箭頭函數(shù)覺得比較好的解說,可以參見