Funzione freccia JavaScript

In questo tutorial imparerai a conoscere la funzione freccia JavaScript con l'aiuto di esempi.

La funzione freccia è una delle funzionalità introdotte nella versione ES6 di JavaScript. Ti permette di creare funzioni in modo più pulito rispetto alle normali funzioni. Ad esempio,
questa funzione

 // function expression let x = function(x, y) ( return x * y; )

può essere scritto come

 // using arrow functions let x = (x, y) => x * y;

utilizzando una funzione freccia.

Sintassi della funzione freccia

La sintassi della funzione freccia è:

 let myFunction = (arg1, arg2,… argN) => ( statement(s) )

Qui,

  • myFunction è il nome della funzione
  • arg1, arg2,… argN sono gli argomenti della funzione
  • statement(s) è il corpo della funzione

Se il corpo ha una singola dichiarazione o espressione, puoi scrivere la funzione freccia come:

 let myFunction = (arg1, arg2,… argN) => expression

Esempio 1: funzione freccia senza argomento

Se una funzione non accetta alcun argomento, è necessario utilizzare parentesi vuote. Per esempio,

 let greet = () => console.log('Hello'); greet(); // Hello

Esempio 2: funzione freccia con un argomento

Se una funzione ha un solo argomento, puoi omettere le parentesi. Per esempio,

 let greet = x => console.log(x); greet('Hello'); // Hello 

Esempio 3: funzione freccia come espressione

Puoi anche creare dinamicamente una funzione e usarla come espressione. Per esempio,

 let age = 5; let welcome = (age console.log('Baby') : () => console.log('Adult'); welcome(); // Baby

Esempio 4: funzioni freccia su più righe

Se il corpo di una funzione ha più istruzioni, è necessario inserirle tra parentesi graffe (). Per esempio,

 let sum = (a, b) => ( let result = a + b; return result; ) let result1 = sum(5,7); console.log(result1); // 12

questo con la funzione freccia

All'interno di una funzione normale, questa parola chiave si riferisce alla funzione in cui viene chiamata.

Tuttavia, thisnon è associato alle funzioni freccia. La funzione freccia non ha una propria this. Quindi ogni volta che chiami this, fa riferimento al suo ambito padre. Per esempio,

All'interno di una normale funzione

 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();

Produzione

 25 undefined Finestra ()

Qui l' this.ageinterno this.sayName()è accessibile perché this.sayName()è il metodo di un oggetto.

Tuttavia, innerFunc()è una funzione normale e this.agenon è accessibile perché thisfa riferimento all'oggetto globale (oggetto Finestra nel browser). Quindi, this.ageall'interno della innerFunc()funzione dà undefined.

All'interno di una funzione freccia

 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();

Produzione

 25 25

Qui, la innerFunc()funzione viene definita utilizzando la funzione freccia. E all'interno della funzione freccia, si thisriferisce all'ambito del genitore. Quindi, this.age25 .

Argomenti vincolanti

Le funzioni regolari hanno argomenti vincolanti. Ecco perché quando si passano argomenti a una funzione normale, è possibile accedervi utilizzando la argumentsparola chiave. Per esempio,

 let x = function () ( console.log(arguments); ) x(4,6,7); // Arguments (4, 6, 7)

Le funzioni freccia non hanno argomenti vincolanti.

Quando si tenta di accedere a un argomento utilizzando la funzione freccia, verrà visualizzato un errore. Per esempio,

 let x = () => ( console.log(arguments); ) x(4,6,7); // ReferenceError: Can't find variable: arguments

Per risolvere questo problema, puoi utilizzare la sintassi di diffusione. Per esempio,

 let x = (… n) => ( console.log(n); ) x(4,6,7); // (4, 6, 7)

Funzione freccia con promesse e richiamate

Le funzioni freccia forniscono una migliore sintassi per scrivere promesse e callback. Per esempio,

 // ES5 asyncFunction().then(function() ( return asyncFunction1(); )).then(function() ( return asyncFunction2(); )).then(function() ( finish; ));

può essere scritto come

 // ES6 asyncFunction() .then(() => asyncFunction1()) .then(() => asyncFunction2()) .then(() => finish);

Cose da evitare con le funzioni freccia

1. Non utilizzare le funzioni freccia per creare metodi all'interno degli oggetti.

 let person = ( name: 'Jack', age: 25, sayName: () => ( // this refers to the global… // console.log(this.age); ) ) person.sayName(); // undefined

2. Non è possibile utilizzare una funzione freccia come costruttore . Per esempio,

 let Foo = () => (); let foo = new Foo(); // TypeError: Foo is not a constructor

Nota : le funzioni freccia sono state introdotte in ES6 . Alcuni browser potrebbero non supportare l'uso delle funzioni delle frecce. Visita il supporto della funzione freccia JavaScript per saperne di più.

Articoli interessanti...