1// 正常寫法,在大括號內的 {} 是需要自行加入 return,如果沒有傳入值則會出現 undefined。
var callSomeone = (someone) => {
return someone + '吃飯了'
}
console.log(callSomeone('小明'))
2// 縮寫,單一行陳述不需要 {}
var callSomeone = (someone) => someone + '吃飯了'
console.log(callSomeone('小明'))
3// 只有一個參數可以不加括號
var callSomeone = someone => someone + '吃飯了'
console.log(callSomeone('小明'))
4// 沒有參數時,一定要有括號
var callSomeone = () => '小明' + '吃飯了'
console.log(callSomeone('小明'))
不能用在建構式/apply/call/bind/Dom/arguments
物件縮寫形式的函式也是屬於 function,所以依然能夠產生作用域。
綁定的 this 不同,傳統與箭頭
1.傳統函式:
依呼叫的方法而定
一般函式在建立時是在 window 下,所以在 window 下使用箭頭函式自然會指向 window,
要確實將箭頭函式宣告在物件內部,這樣
this
才會指向該物件在寫物件內的函式時,為了確保 this 能夠正確運作會先將它賦予在另一個變數上 (that, self, vm…)
2.箭頭函式:
- 綁定到其定義時所在的物件
- 箭頭fun一般會指向window
- 箭頭fun是在物件底下,箭頭函式會是使用它所在的物件
- 箭頭函式本就會指向他所生成的物件上,所以可以不需要另外指向另一個物件。
- 如果 不是 建立在物件內的函式,並不會影響箭頭函示的 this:
this
在 Arrow function 中是被綁定的,- Prototype 中使用 this,如果原型上新增一個箭頭函式,並嘗試使用 this 的話會指向全域。
- 箭頭函數會自動將 this 變數綁定到其定義時所在的物件 或window 或 定義的環境
- ex1.在物件裡的傳統fun(物件內)裡面的箭頭函式this會指向(物件內)
- ex2.在物件裡的箭頭函示(window)裡面的箭頭函示會指向(Window)
- 物件底下的注意,如果使用箭頭函式,this 依然指向 windows
this
是指向所建立的物件上,如果是用在監聽 DOM 上一樣會指向 window- Arrow fun 沒有自己的this,他會延續外層的this
////////
導入es6原因
1.是因為原本的fun接到第二層會跑掉
2.用箭頭會保留第一層的this .箭頭不會有自己的this,會沿用外面的this