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,
myFunctioner navnet på funksjonenarg1, arg2,… argNer 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 thiser 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.ageinnsiden this.sayName()tilgjengelig fordi this.sayName()metoden til et objekt er.
Imidlertid innerFunc()er det en normal funksjon og this.ageer ikke tilgjengelig fordi det thisrefererer til det globale objektet (Window-objekt i nettleseren). Derfor, this.ageinne 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, thisrefererer til foreldrenes omfang. Derfor this.agegir 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 argumentsnø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.








