Funzioni nidificate JavaScript

Funzioni nidificate JavaScript

Le funzioni nidificate JavaScript sono i tipi di funzioni definite all'interno di un'altra funzione. Una o più funzioni possono essere aggiunte all'interno di una funzione e l'ambito delle funzioni esterne include queste funzioni nidificate o interne. Le funzioni esterne sono anche indicate come funzioni genitori e le funzioni interne possono essere nominate come funzioni figlio nelle funzioni nidificate di JavaScript. Le variabili e i parametri della funzione genitore sono accessibili alla funzione figlio, mentre la funzione genitore non può accedere alle variabili dichiarate all'interno delle funzioni figlio.

Questo articolo ha discusso delle funzioni nidificate JavaScript. Inoltre, abbiamo anche spiegato l'ambito variabile, i parametri e le dichiarazioni di restituzione delle funzioni nidificate con l'aiuto degli esempi.

Funzioni nidificate JavaScript

In JavaScript, una funzione nidificata è una funzione definita all'interno o all'interno di un'altra funzione. La procedura per la creazione di una funzione nidificata è la stessa che seguiamo per la funzione normale, ma per creare una funzione nidificata, dobbiamo definire la funzione nuova o figlio all'interno della funzione genitore.

Ecco il Sintassi di funzioni nidificate JavaScript:

Funzione ParentFunction () // Definizione funzione

Function ChildFunction () // Definizione funzione

// corpo della funzione figlio

ChildFunction (); // Chiamata sulla funzione figlio

genitorfunction (); // Chiamata della funzione genitore

Come puoi vedere dalla sintassi, dobbiamo definire la funzione dell'infanzia () all'interno della Funzione genitore (). Inoltre, quando vogliamo invocare la funzione dei bambini (), dobbiamo chiamarla all'interno del corpo della Funzione genitore ().

Esempio: usando le funzioni nidificate JavaScript

Questo esempio ti mostrerà come creare funzioni nidificate JavaScript. A tale scopo, definiremo una funzione genitore denominata "addNum ()", Che ha due parametri,"X" E "y". Dopo averlo fatto, creeremo una funzione figlio "showMessage ()"Che stampa un messaggio di testo alla finestra della console:

funzione addnum (x, y)

// funzione nidificata
funzione showmessage (testo)

console.log (testo);

Lascia che Sum = X+Y;
// invocando la funzione nidificata
showmessage ("somma è"+ somma)

Nota che abbiamo chiamato "showMessage ()"Funzione all'interno della definizione della funzione di"addNum ()" funzione. Nel passaggio successivo, chiameremo la funzione genitore addnum () mentre passeremo "5" E "6"Come argomenti:

addnum (5,6)

Come puoi vedere dall'output, abbiamo eseguito con successo le funzioni nidificate del nostro esempio:

Ambito variabile di funzioni nidificate Javascript

Ora, parliamo dell'ambito delle funzioni nidificate in JavaScript. Le funzioni nidificate hanno il proprio ambito; Tuttavia, possono anche accedere all'ambito del genitore o della funzione esterna. Dovresti tenere presente due punti sull'ambito variabile di JavaScript Nestiant Funzioni: una funzione nidificata è privata per la sua funzione genitore e una funzione nidificata ha accesso all'ambito della funzione genitore.

Spiegheremo ciascuna delle dichiarazioni fornite con l'aiuto di esempi.

Come abbiamo affermato, la funzione nidificata è considerata "privato"Per la funzione che contiene la sua definizione. Significa che solo il genitore o la funzione di contenimento possono accedere alla funzione nidificata e non ti sarà permesso di accedervi al di fuori della funzione specificata. Questo accade perché abbiamo definito la funzione interna all'interno dell'ambito della funzione esterna.

Ad esempio, abbiamo definito una funzione esterna "Aggiungi numero()"Nel codice seguente e poi aggiunto la funzione interna"showMessage ()"All'interno della definizione della funzione esterna:

funzione addnumber (x, y)

funzione showmessage (testo)

console.log (testo);

Lascia che Sum = X+Y;
showmessage ("somma è" + somma)

Ora, quando proviamo ad accedere alla funzione interiore "showMessage ()"Al di fuori del suo ambito, lancerà il"Riferimento non integrato"Errore:

showmessage ('20 ');

Tutte le funzioni, le variabili e gli argomenti definiti nella funzione esterna sono accessibili alla funzione nidificata creata. Questa abilità è nota come "ambito lessicale", in cui la funzione interna può accedere all'ambito del genitore o della funzione esterna.

Non passeremo alcun argomento alla nostra funzione interiore di showmessage () nell'esempio seguente. Quello che faremo è utilizzare gli argomenti "X" E "y" del nostro "Aggiungi numero()"Funzione esterna e"somma"Variabile:

funzione addnumber (x, y)

funzione showMessage ()

console.log ('somma di %d + %d è %d', x, y, somma);

Lascia che Sum = X+Y;
showMessage ()

Ora invoceremo la funzione esterna "Aggiungi numero()"E passa il"4" E "6"Come argomenti:

AddNumber (4,6)

Dai un'occhiata all'output di seguito, il che significa che abbiamo accettato con successo "somma"Variabile,"X", E "y"Argomento della funzione AddNumber Outer nella funzione ShowMessage ():

Restituire una funzione nidificata JavaScript

La funzione esterna ha la capacità di restituire la funzione nidificata. Ad esempio, nell'esempio seguente, la funzione DisplayCounter () ha un “contare"Variabile e restituisce la funzione interiore incremenza ():

funzione displayCounter ()
let count = 0;
increment = function ()
restituire ++ conteggio;
;
incremento di ritorno;

Memorizzeremo la funzione DisplayCounter () nella "contatore"Nel passaggio successivo. Ora il concetto che dobbiamo discutere qui è che il "incremento()"La funzione avrà comunque accesso a"contare"Proprietà del"DisplayCounter ()"Funzione Quando il displayCounter () ha terminato l'esecuzione. "Chiusura", Una funzione JavaScript, lo rende possibile.

Qui il "contareLa proprietà "è locale per il"DisplayCounter ()"Funzione, tuttavia, la definita"incremento"La funzione può anche accedervi perché è nidificata all'interno del"DisplayCounter ()" funzione:

Counter = DisplayCounter ()

Il codice sopra offerto chiamerà il "DisplayCounter ()" funzione. Quindi, la funzione DisplayCounter () inizializzerà prima il “contare"Variabile a"0"Valore e quindi restituisce il"incremento()" funzione. Perché il "contare"La proprietà non viene distrutta, quando chiameremo la funzione di incremento attraverso il"contatore()", Ogni volta il"contare"La proprietà verrà incrementata in base al codice aggiunto:

console.log (counter ());
console.log (counter ());
console.log (counter ());

Dai un'occhiata all'output di seguito dell'esempio fornito:

Parametri delle funzioni nidificate JavaScript

La funzione interiore può anche prendere argomenti. Ad esempio, nel seguente esempio, il "InnerFunction ()"È restituito dal"esterno ()"E ognuno di essi accetta un set di argomenti:

funzione esterfunction (x)
InnerFunction = function (y)
console.log ("x %d y %d", x, y)
;
restituire internista;

Prendere il InnerFunction (), Aggiungeremo il seguente codice nel nostro programma JavaScript durante il passaggio "3"Come argomento per il esterno ():

Innerfunction = esterno (3);

Quindi, invocheremo l'interfunzione () con valore "7"Come argomento:

Internfunzione (7);

Puoi anche passare gli argomenti per le funzioni esterne e interne contemporaneamente:

esterno (2) (3);

Entrambe le righe specificate del codice hanno invocato la Innerfunction () e ha emesso gli argomenti passati:

Conclusione

JavaScript ti consente di utilizzare le funzioni nidificate nel programma senza riscontrare errori. Un bambino o una funzione interna può essere aggiunto all'interno di una funzione esterna in JavaScript. Tutte le variabili locali e globali della funzione esterna sono accessibili alla funzione interna. Nel caso della funzione esterna, sono accessibili solo i valori delle proprietà globali e i metodi e le variabili definite nelle funzioni dei genitori. Questo articolo ha discusso delle funzioni nidificate JavaScript. Inoltre, abbiamo anche spiegato l'ambito variabile, la proprietà di chiusura, l'ambito lessicale, i parametri e le dichiarazioni di restituzione delle funzioni nidificate JavaScript, con l'aiuto degli esempi.