I denne opplæringen vil du lære om JavaScript-pilfunksjon ved hjelp av eksempler.
Pilfunksjon er en av funksjonene som er introdusert i ES6-versjonen av JavaScript. Det lar deg lage funksjoner på en renere måte sammenlignet med vanlige funksjoner. For eksempel
Denne funksjonen
// function expression let x = function(x, y) ( return x * y; )
kan skrives som
// using arrow functions let x = (x, y) => x * y;
ved hjelp av en pilfunksjon.
Syntaks for pilfunksjon
Syntaksen til pilfunksjonen er:
let myFunction = (arg1, arg2,… argN) => ( statement(s) )
Her,
myFunction
er navnet på funksjonenarg1, arg2,… argN
er funksjonsargumentenestatement(s)
er funksjonskroppen
Hvis kroppen har ett utsagn eller uttrykk, kan du skrive pilfunksjon som:
let myFunction = (arg1, arg2,… argN) => expression
Eksempel 1: Pilefunksjon uten argument
Hvis en funksjon ikke tar noe argument, bør du bruke tomme parenteser. For eksempel,
let greet = () => console.log('Hello'); greet(); // Hello
Eksempel 2: Pilfunksjon med ett argument
Hvis en funksjon bare har ett argument, kan du utelate parentesene. For eksempel,
let greet = x => console.log(x); greet('Hello'); // Hello
Eksempel 3: Pilfunksjon som uttrykk
Du kan også lage en funksjon dynamisk og bruke den som et uttrykk. For eksempel,
let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby
Eksempel 4: Funksjoner for flere linjer
Hvis et funksjonsorgan har flere utsagn, må du sette dem i krøllete parenteser ()
. For eksempel,
let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12
dette med pilfunksjon
Inne i en vanlig funksjon refererer dette nøkkelordet til funksjonen der det heter.
Imidlertid this
er ikke assosiert med pilfunksjoner. Pilfunksjonen har ikke sin egen this
. Så når du ringer this
, refererer det til foreldrenes omfang. For eksempel,
Inne i en vanlig funksjon
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( // this is accessible console.log(this.age); function innerFunc() ( // this refers to the global object console.log(this.age); console.log(this); ) innerFunc(); ) ) let x = new Person(); x.sayName();
Produksjon
25 udefinert vindu ()
Her er this.age
innsiden this.sayName()
tilgjengelig fordi this.sayName()
metoden til et objekt er.
Imidlertid innerFunc()
er det en normal funksjon og this.age
er ikke tilgjengelig fordi det this
refererer til det globale objektet (Window-objekt i nettleseren). Derfor, this.age
inne i innerFunc()
funksjonen gir undefined
.
Inne i en pilfunksjon
function Person() ( this.name = 'Jack', this.age = 25, this.sayName = function () ( console.log(this.age); let innerFunc = () => ( console.log(this.age); ) innerFunc(); ) ) const x = new Person(); x.sayName();
Produksjon
25 25
Her innerFunc()
defineres funksjonen ved hjelp av pilfunksjonen. Og inne i pilfunksjonen, this
refererer til foreldrenes omfang. Derfor this.age
gir 25 .
Argumenter bindende
Vanlige funksjoner har bindende argumenter. Derfor når du overfører argumenter til en vanlig funksjon, kan du få tilgang til dem ved hjelp av arguments
nøkkelordet. For eksempel,
let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)
Pilfunksjoner har ikke bindende argumenter.
Når du prøver å få tilgang til et argument ved hjelp av pilfunksjonen, vil det gi en feil. For eksempel,
let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments
For å løse dette problemet kan du bruke spredningssyntaks. For eksempel,
let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)
Pilfunksjon med løfter og tilbakekallinger
Pilfunksjoner gir bedre syntaks for å skrive løfter og tilbakeringinger. For eksempel,
// ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));
kan skrives som
// ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);
Ting du bør unngå med pilfunksjoner
1. Du bør ikke bruke pilfunksjoner til å lage metoder inne i objekter.
let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined
2. Du kan ikke bruke en pilfunksjon som konstruktør . For eksempel,
let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor
Merk : Pilfunksjoner ble introdusert i ES6 . Noen nettlesere støtter kanskje ikke bruk av pilfunksjoner. Gå til JavaScript Arrow Function support for å lære mer.