Dichiarazione delle funzioni JS in due modi: qual è il vantaggio?

3

Ho trovato il codice JS in cui vedo le funzioni dichiarate in due stili diversi:

Metodo 1

function doSomething(){

   alert('This is one way of declaring a function');

}

Metodo 2

doSomething = function() {

    alert('And this is another way of declaring the same function');    

}

Quindi qual è la differenza tra i due e c'è un caso in cui avrebbe senso seguire un metodo rispetto all'altro?

PS: Scusa se il titolo sembra vago. Non conoscevo il termine tecnico usato per descrivere il modo in cui sono dichiarate le due funzioni precedenti.

    
posta asprin 26.02.2015 - 05:45
fonte

3 risposte

9

Per Metodo 1, la funzione e il relativo simbolo vengono elaborati dal parser prima che venga eseguito qualsiasi codice in questo file. Quindi la definizione è "issata" all'inizio di qualsiasi ambito e il simbolo può essere utilizzato in qualsiasi parte dello scope in cui è definito. L'ordine di dichiarazione all'interno di un ambito non ha importanza.

Quindi, con il primo metodo, puoi fare ciò:

hello();

function hello() {
    console.log("hello");
}

perché il primo passaggio sul codice per analizzarlo definirà il simbolo ciao come funzione. Pertanto, nel secondo passaggio quando il codice viene effettivamente eseguito, il simbolo hello esiste già, quindi può essere chiamato in qualsiasi momento.

Per Metodo 2, la funzione viene elaborata dal parser, ma il simbolo che contiene la funzione non viene assegnato un valore fino a quando l'istruzione di assegnazione non viene eseguita in fase di esecuzione. Codice in questo ambito prima che questa linea non possa usare il simbolo (perché non ha ancora un valore). L'ordine di assegnazione all'interno di un ambito è importante e deve essere prestato attenzione a

Usando, il tuo secondo metodo, lo stesso ordine dell'esempio precedente non funzionerà:

hello();

var hello = function() {
    console.log("hello");
}

perché il simbolo hello non è ancora definito quando si tenta di usarlo. Invece, dovresti fare questo:

var hello = function() {
    console.log("hello");
}

hello();

Le persone sembrano avere una preferenza per uno stile rispetto all'altro. Personalmente, mi piace il primo stile in quanto sembra più semplice lasciare che il parser definisca tutti i simboli delle funzioni e non debba preoccuparsi dell'ordine di dichiarazione. L'unica eccezione che faccio è se in realtà sto assegnando funzioni diverse a una determinata variabile a seconda di alcune condizioni. Quindi, potrei usare il secondo stile.

    
risposta data 26.02.2015 - 05:49
fonte
1

Il metodo 1 è un tipo di dichiarazione di funzione e il metodo 2 è un tipo di espressione di funzione. Conoscere i nomi di questi due tipi di metodi può aiutarti in futuro. Sono disponibili diversi altri stackExchanges e stackOverflow, se hai ancora bisogno di aiuto.

ex: link

    
risposta data 27.10.2015 - 16:58
fonte
0

Dalla mia esperienza, l'espressione di funzione si trova più nella programmazione funzionale :

const addOne = (x) => x + 1;
let array = map([1, 2, 3], addOne);

Al contrario, la dichiarazione di funzione è più comune in programmazione procedurale :

function printNames(names) {
    for (const name of names) {
        printName();
    }
}

function printName(name) {
    console.log('Name: ${name}');
}

o programmazione orientata agli oggetti :

class Wallet {
    constructor() {
        this.ballance = 0;
    }
    deposit(x) {
        this.ballance += x;
    }
    withdraw(x) {
        this.ballance -= x;
    }
}

Tutti i casi di utilizzo validi. La scelta dipende dal tuo bisogno.

    
risposta data 10.03.2018 - 19:40
fonte

Leggi altre domande sui tag