Funzione()

Una funzione è un contenitore di istruzioni di codice che possono essere richiamate utilizzando le parentesi () operatore. I parametri possono essere passati all'interno delle parentesi durante l'invocazione in modo che le istruzioni nella funzione possano accedere a determinati valori quando la funzione viene richiamata.

Nel seguente codice, creiamo due versioni di an addNumbers funzione objectone usando il nuovo operatore e un altro utilizzando il modello letterale più comune. Entrambi si aspettano due parametri. In ogni caso, invochiamo la funzione, passando i parametri tra parentesi () operatore.

Esempio: sample76.html

 

Una funzione può essere utilizzata per restituire un valore, costruire un oggetto o come meccanismo per eseguire semplicemente il codice. JavaScript ha diversi usi per le funzioni, ma nella sua forma più elementare una funzione è semplicemente un ambito univoco di istruzioni eseguibili.


Funzione() parametri

Il Funzione() costruttore prende un numero indefinito di parametri, ma l'ultimo parametro atteso dal Funzione() costruttore è una stringa contenente istruzioni che comprendono il corpo della funzione. Qualsiasi parametro passato al costruttore prima dell'ultimo sarà disponibile per la funzione che si sta creando. È anche possibile inviare più parametri come stringa separata da virgole.

Nel codice seguente, io contrasto l'uso del Funzione() costruttore con i modelli più comuni di istanziazione di un oggetto funzione.

Esempio: sample77.html

 

Facendo leva direttamente sul Funzione() il costruttore non è raccomandato o, in genere, è mai stato eseguito perché JavaScript lo utilizzerà eval () analizzare la stringa contenente la logica delle funzioni. Molti considerano eval () essere inutile in testa. Se è in uso, un difetto nel design del codice è altamente possibile.

Usando il Funzione() costruttore senza il nuovo parola chiave ha lo stesso effetto di usare solo il costruttore per creare oggetti funzione (nuova funzione ('x', 'return x') vs. function (('x', 'return x')).

Nessuna chiusura viene creata quando si richiama il Funzione() costruttore direttamente.


Funzione() Proprietà e metodi

L'oggetto funzione ha le seguenti proprietà (escluse proprietà e metodi ereditati):

Proprietà (Function.prototype;):

  • prototipo

Funzione Proprietà e metodi dell'istanza dell'oggetto

Le istanze dell'oggetto funzione hanno le proprietà e i metodi seguenti (esclusi proprietà e metodi ereditati):

Proprietà istanza (var myFunction = function (x, y, z) ; myFunction.length;):

  • argomenti
  • costruttore
  • lunghezza

Metodi di istanza (var myFunction = function (x, y, z) ; myFunction.toString ();):

  • applicare()
  • chiamata()
  • accordare()

Le funzioni restituiscono sempre un valore

Sebbene sia possibile creare una funzione semplicemente per eseguire istruzioni di codice, è anche molto comune che una funzione restituisca un valore. Nel seguente esempio, stiamo restituendo una stringa dal dì ciao funzione.

Esempio: sample78.html

 

Se una funzione non specifica un valore di ritorno, non definito viene restituito. Nel seguente esempio, chiamiamo il guaire funzione che registra la stringa "guasta" nella console senza restituire esplicitamente un valore.

Esempio: sample79.html

 

Il concetto da portare via è che tutte le funzioni restituiscono un valore, anche se non si fornisce esplicitamente un valore da restituire. Se non si specifica un valore da restituire, il valore restituito è non definito.


Le funzioni sono cittadini di prima classe (non solo sintassi, ma valori)

In JavaScript, le funzioni sono oggetti. Ciò significa che una funzione può essere memorizzata in una variabile, in una matrice o in un oggetto. Inoltre, una funzione può essere passata e restituita da una funzione. Una funzione ha proprietà perché è un oggetto. Tutti questi fattori rendono le funzioni di cittadini di prima classe in JavaScript.

Esempio: sample80.html

 

È fondamentale rendersi conto che una funzione è un oggetto e quindi un valore. Può essere passato intorno o aumentato come qualsiasi altra espressione in JavaScript.


Passaggio di parametri a una funzione

I parametri sono veicoli per il passaggio di valori nell'ambito di una funzione quando viene invocato. Nel seguente esempio invochiamo addFunction (). Dal momento che l'abbiamo predefinito per prendere due parametri, due valori aggiunti diventano disponibili all'interno del suo ambito.

Esempio: sample81.html

 

In contrasto con altri linguaggi di programmazione, è perfettamente legale in JavaScript omettere i parametri anche se la funzione è stata definita per accettare questi argomenti. I parametri mancanti vengono semplicemente indicati con il valore non definito. Ovviamente, tralasciando i valori per i parametri, la funzione potrebbe non funzionare correttamente.

Se si passano parametri inaspettati di una funzione (quelli non definiti quando la funzione è stata creata), non si verificherà alcun errore. Ed è possibile accedere a questi parametri dal argomenti oggetto, che è disponibile per tutte le funzioni.


Questo e argomenti I valori sono disponibili per tutte le funzioni

All'interno dello scopo e del corpo di tutte le funzioni, il Questo e argomenti i valori sono disponibili.

Il argomenti object è un oggetto di tipo array che contiene tutti i parametri passati alla funzione. Nel seguente codice, anche se rinunciamo a specificare i parametri quando definiamo la funzione, possiamo fare affidamento sul argomenti array passato alla funzione per accedere ai parametri se vengono inviati al momento dell'invocazione.

Esempio: sample82.html

 

Il Questo parola chiave, passato a tutte le funzioni, è un riferimento all'oggetto che contiene la funzione. Come ci si potrebbe aspettare, le funzioni contenute negli oggetti come proprietà (metodi) possono essere utilizzate Questo per ottenere un riferimento all'oggetto padre. Quando una funzione è definita nell'ambito globale, il valore di Questo è l'oggetto globale. Rivedi il seguente codice e assicurati di aver capito cosa Questo sta tornando.

Esempio: sample83.html

 

Il arguments.callee Proprietà

Il argomenti l'oggetto ha una proprietà chiamata callee, che è un riferimento alla funzione attualmente in esecuzione. Questa proprietà può essere utilizzata per fare riferimento alla funzione dall'ambito della funzione (arguments.callee) un auto-riferimento. Nel seguente codice, usiamo questa proprietà per ottenere un riferimento alla funzione chiamante.

Esempio: sample84.html

 

Questo può essere utile quando una funzione deve essere chiamata in modo ricorsivo.


L'istanza di funzione lunghezza Proprietà e arguments.length

Il argomenti l'oggetto ha un unico lunghezza proprietà. Sebbene si possa pensare che questa proprietà di lunghezza fornisca il numero di argomenti definiti, in realtà fornisce il numero di parametri inviati alla funzione durante l'invocazione.

Esempio: sample85.html

 

Usando il lunghezza proprietà di tutti Funzione() istanze, possiamo effettivamente prendere il numero totale di parametri che la funzione si aspetta.

Esempio: sample86.html

 

Il arguments.length la proprietà è stata deprecata in JavaScript 1.4, ma è possibile accedere al numero di argomenti inviati a una funzione da lunghezza proprietà dell'oggetto funzione. Andando avanti, è possibile ottenere il valore della lunghezza sfruttando il callee proprietà per ottenere in primo luogo un riferimento alla funzione invocata (arguments.callee.length).


Ridefinizione dei parametri di funzione

I parametri di una funzione possono essere ridefiniti all'interno della funzione direttamente o utilizzando il comando argomenti array. Dai un'occhiata a questo codice:

Esempio: sample87.html

 

Notare che posso ridefinire il valore del parametro bar usando il argomenti indicizzare o riassegnando direttamente un nuovo valore al parametro.


Restituire una funzione prima che sia eseguita (Annulla esecuzione della funzione)

Le funzioni possono essere annullate in qualsiasi momento durante l'invocazione utilizzando il ritorno parola chiave con o senza valore. Nel seguente esempio, stiamo annullando il Inserisci funzione se i parametri sono indefiniti o non un numero.

Esempio: sample88.html

 

Il concetto da portare via qui è che è possibile annullare l'esecuzione di una funzione usando il ritorno parola chiave in qualsiasi momento nell'esecuzione della funzione.


Definizione di una funzione (istruzione, espressione o costruttore)

Una funzione può essere definita in tre modi diversi: un costruttore di funzioni, un'istruzione di funzione o un'espressione di funzione. Nell'esempio seguente, mostro ogni variazione.

Esempio: sample89.html

 

Alcuni hanno detto che esiste un quarto tipo di definizione per le funzioni, chiamato "espressione della funzione denominata". Un'espressione di funzione con nome è semplicemente un'espressione di funzione che contiene anche un nome (ad es., var add = function add (x, y) return x + y).


Richiamo di una funzione (funzione, metodo, costruttore o chiamata() e applicare())

Le funzioni sono invocate usando quattro diversi scenari o modelli.

  • Come una funzione
  • Come metodo
  • Come costruttore
  • utilizzando applicare() o chiamata()

Nel seguente esempio, esaminiamo ciascuno di questi modelli di invocazione.

Esempio: sample90.html

 

Assicurati di essere a conoscenza di tutti e quattro i modelli di chiamata, in quanto il codice che incontrerai potrebbe contenere uno di essi.


Funzioni anonime

Una funzione anonima è una funzione a cui non viene assegnato un identificatore. Le funzioni anonime vengono principalmente utilizzate per passare le funzioni come parametro a un'altra funzione.

Esempio: sample91.html

 

Espressione di funzione autoinviante

Un'espressione di funzione (davvero qualsiasi funzione tranne una creata dal Funzione() costruttore) può essere immediatamente richiamato dopo la definizione utilizzando l'operatore parentesi. Nel seguente esempio, creiamo a Dici parola() espressione della funzione e quindi invoca immediatamente la funzione. Questa è considerata una funzione auto-invocante.

Esempio: sample92.html

 

Dichiarazioni di funzione anonima autoinviante

È possibile creare una dichiarazione di funzione anonima che è auto-invocata. Questa è chiamata funzione anonima autoinvitante. Nel seguente esempio, creiamo diverse funzioni anonime che vengono invocate immediatamente.

Esempio: sample93.html

 

Secondo lo standard ECMAScript, le parentesi attorno alla funzione (o qualsiasi cosa che trasforma la funzione in un'espressione) sono necessarie se la funzione deve essere invocata immediatamente.


Le funzioni possono essere annidate

Le funzioni possono essere annidate all'interno di altre funzioni indefinitamente. Nel seguente esempio di codice, incapsuliamo il goo funzione all'interno del bar funzione, che è all'interno del foo funzione.

Esempio: sample94.html

 

Il semplice concetto qui è che le funzioni possono essere annidate e non c'è limite alla profondità del nesting.

Ricorda, il valore di Questo per le funzioni annidate sarà l'oggetto principale (il finestra oggetto in un browser Web) in JavaScript 1.5, ECMA-262, Edizione 3.


Passaggio di funzioni a funzioni e restituzione di funzioni da funzioni

Come accennato in precedenza, le funzioni sono cittadini di prima classe in JavaScript. E poiché una funzione è un valore e una funzione può essere passata a qualsiasi tipo di valore, è possibile passare una funzione a una funzione. Le funzioni che accettano e / o restituiscono altre funzioni sono talvolta chiamate "funzioni di ordine superiore.

Nel seguente codice, stiamo passando una funzione anonima al foo funzione che torniamo immediatamente dal foo funzione. È questa funzione anonima che la variabile bar punta a, dal foo accetta e restituisce la funzione anonima.

Esempio: sample95.html

 

Cosi quando bar viene invocato, richiama la funzione anonima che è stata passata al foo () funzione, che viene quindi restituita dal foo () funzione e referenziato dal bar variabile. Tutto questo per mostrare il fatto che le funzioni possono essere passate come qualsiasi altro valore.


Invocazione di istruzioni di funzione prima che vengano definite (ovvero sollevamento di funzioni)

Una dichiarazione di funzione può essere invocata durante l'esecuzione prima della sua effettiva definizione. Questo è un po 'strano, ma dovresti esserne consapevole in modo da poterlo sfruttare, o almeno sapere cosa sta succedendo quando lo incontri. Nel seguente esempio, invoco il sayYo () e somma() istruzioni di funzione prima che siano definite.

Esempio: sample96.html

 

Ciò accade perché prima dell'esecuzione del codice, le istruzioni di funzione vengono interpretate e aggiunte allo stack / contesto di esecuzione. Assicurati di esserne a conoscenza mentre usi le istruzioni di funzione.

Le funzioni definite come espressioni di funzioni non vengono issate. Solo le istruzioni di funzione sono issate.


Una funzione può chiamarsi (aka ricorsione)

È perfettamente legittimo per una funzione chiamarsi. In realtà, questo è spesso usato in modelli di codifica ben noti. Nel codice che segue, iniziamo il countDownFrom funzione, che quindi chiama se stessa tramite il nome della funzione countDownFrom. In sostanza, questo crea un ciclo che conta alla rovescia da 5 a 0.

Esempio: sample97.html

 

Dovresti essere consapevole del fatto che è naturale che una funzione invochi se stessa (ovvero la ricorsione) o lo faccia ripetutamente.


Conclusione

Le funzioni sono uno degli aspetti più utilizzati di JavaScript, si spera che ora abbia una migliore comprensione di come usarli.