1. 程式人生 > 其它 >ES6箭頭函式---(箭頭函式和普通函式的區別)

ES6箭頭函式---(箭頭函式和普通函式的區別)

技術標籤:Javascripes6javascript

箭頭函式

一個引數

// 只有一個引數
// 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(約定俗成)
  • 在嚴格模式下,沒有直接呼叫者的函式中的thisunderfined
  • 使用callapply,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