ES6箭頭函式---(箭頭函式和普通函式的區別)
阿新 • • 發佈:2021-01-01
箭頭函式
一個引數
// 只有一個引數
// f : 函式名稱
// v : 函式引數
// v+v : 函式內容
let f=v=> v+v
console.log(f(10)) //20
兩個引數
// 兩個引數需加小括號
let ff=(v1,v2)=> v1+v2
console.log(ff(10,20))
多個語句
// 有多個語句的時候需要加大括號
// 有多個語句的時候return不能省略
let fff=(a,b,c)=>
{
console.log(a)
return a+b+c
}
console. log(fff(1,1,1))
返回物件
// 返回物件需要在物件的外面加小括號包起來
let p=(name,age)=>({name:name,age:age})
console.log(p('張三',18))
演示陣列排序
//給數組裡面的值排序
let numbers=[10,2,11,15,22,36]
// let res=numbers.sort(function(a,b){
// return a-b
// })
let res=numbers.sort((a,b)=>a-b)
console.log(res)
注意事項
- ES6允許使用箭頭(=>)定義
- 不需要引數或者多個引數,需要加上()
- 函式體有多條語句時,需要使用大括號{},且必須使用return返回
- 箭頭函式返回物件時,需要用小括號包起來
- 箭頭函式使得表達更簡潔
- 箭頭函式能夠簡化回撥函式
箭頭函式this指向
普通函式中的this
- this總是代表它的直接呼叫者(js的this時執行上下文),例如obj.func,那麼func中的this就是obj
- 在預設情況(非嚴格模式下,未使用‘use strict’),沒有找到直接呼叫者,則this指的是window(約定俗成)
- 在嚴格模式下,沒有直接呼叫者的函式中的this是underfined
- 使用call,apply,bind繫結的this指的是繫結物件
箭頭函式中的this
- ***箭頭函式沒有自己的this,它的this是繼承而來的,預設指向在定義它時所處的物件(宿主物件)***,而不是執行時的物件,定義它的時候,可能環境是window,箭頭函式可以方便地讓我們在setTimeout,setInterval中方便的使用this
- 在箭頭函式中,this指向的固定化,並不是因為箭頭函式內部有繫結this的機制,實際原因是箭頭函式根本沒有自己的this,導致內部的this就是外層程式碼塊的this
// var p={
// name:"張三",
// say(){
// console.log("姓名:"+this.name)
// }
// }
// p.say()
// var p={
// name:"張三",
// say(){
// var a=function(){
// console.log(this,this.name) //找不到name underfind
// }
// a()
// }
// }
// p.say()
//通過定義全域性變數
// var p={
// name:"張三",
// say(){
// let self=this //把this賦值給變數量self
// var a=function(){
// console.log(self,self.name) //通過self呼叫
// }
// a()
// }
// }
// p.say()
//使用bind 繫結
// var p={
// name:"張三",
// say(){
// var a=function(){
// console.log(this.name)
// }.bind(this) //找不到this物件時,通過bind繫結this
// a()
// }
// }
// p.say()
//箭頭函式
var p={
name:"張三",
say(){
var a=()=>{
console.log(this.name)
}
a()
}
}
p.say()
箭頭函式和普通函式的區別
第一點:寫法上:箭頭函式相比普通函式寫法較為簡介
第二點:
- 普通函式this代表直接呼叫者,例如:person.name的this代表perspn
- 在嚴格模式下(‘use strict’),沒有找到直接呼叫者的話,this則為undefined
- 在非嚴格模式下,沒有找到直接呼叫者的話,this則為window
- 箭頭函式this沒有明確指向,它的this直接繼承父類,如果父類也沒有明確指向this那麼this代表undefinded
箭頭函式注意事項:
- 1.當引數只有一個時可以省略小括號
- 2.當引數有多個/沒有時不能省略小括號
- 3.當函式體只有一句話時,可以省略大括號和return
- 4.當函式體有多句話時,不能省略大括號和return
- 5.this沒有明確指向,直接繼承父類this