Potrebbero esserci due tipi di "callback" nella programmazione? [chiuso]

-3

Conosco due definizioni per un "Callback":

  1. Una funzione che viene chiamata dopo ("richiamata quando") viene attivato un determinato evento.

  2. Una funzione passata a un'altra funzione come parametro.

Un esempio per la prima definizione (JavaScript):

document.addEventListener('DOMContentLoaded', ()=>{
    alert("DOMContentLoaded !");
});

Capisco che alert() sia il gestore di eventi per l'attivazione di eventi DOMContentLoaded , ma un programmatore mi ha detto che "dire che un callback è un gestore di eventi è come dire che un veicolo è una bicicletta". Mi manca come questa affermazione è logica.

Perché frainteso la seconda definizione (JavaScript):

let x = (y=1)=>{
    console.log(y, "\n We get 1, so it works.");
}
x();

Quanto sopra funziona, ma se passerò un'altra funzione come parametro alla prima funzione, non solo ci sarà un errore, ma sembrerà anche brutto IMO:

let x = ( let y = (z=1)=>{console.log(z);} )=>{
    y();
}
x();

Uncaught SyntaxError: Unexpected identifier

Ho frainteso la seconda definizione; che senso ha "passare un'altra funzione come parametro alla prima funzione" nella programmazione in generale.

Le mie domande

  1. se "callback" è un concetto formale CS , la cui definizione dei due è corretta.

  2. Se almeno in JavaScript non si può effettivamente passare una funzione come parametro ad un'altra funzione, cosa significano alcuni programmatori quando dicono che "una callback è quando si passa una funzione come 'argomento' (parametro) a un'altra funzione "?

posta JohnDoea 25.09.2018 - 06:06
fonte

4 risposte

3

Il tuo javascript lancia un'eccezione perché hai scritto javascript cattivo, che non ha nulla a che fare con niente.

La definizione formale che stai cercando è funzione di ordine superiore e lo sviluppatore che ha notato tale evento- i gestori sono solo una cosa che puoi fare con loro era assolutamente corretto.

    
risposta data 25.09.2018 - 08:26
fonte
2

La tua definizione 1

A function that is being called-after ("called-back when") a certain event is triggered.

manca il modo in cui il dispatcher dell'evento ottiene la funzione da chiamare in primo luogo. Questo è coperto dalla tua definizione 2

A function that is passed to another function as a parameter.

document.addEventListener('DOMContentLoaded', ()=>{
    alert("DOMContentLoaded !");
});

Qui passi due cose a addEventListener , un identificativo di quale evento ti interessa e una funzione per chiamare in risposta a quell'evento

Sembra anche che tu sia confuso su cosa significhi passare i parametri.

let x = (y=1)=>{
    console.log(y, "\n We get 1, so it works.");
}
x();

Nella tua chiamata a x qui, tu non passi parametri , e invece usi il parametro predefinito 1 per y . Molte funzioni definite non dovrebbero avere parametri predefiniti, ma dovrebbero riceverle come addEventListener , nel sito di chiamata.

let x = (y)=>{
    console.log(y, "\n We get any number, so it works.");
}
x(1);
x(42);
    
risposta data 25.09.2018 - 10:29
fonte
0

Un "callback" è un codice che viene passato ad alcune funzioni con l'intento di chiamarlo al momento opportuno.

Il tuo primo esempio è solo un caso speciale, in cui "al momento opportuno" è "quando viene attivato un determinato evento". Uso molto spesso questo quando il momento appropriato è "quando un url è stato scaricato e tutti gli errori sono stati gestiti" o "quando l'utente preme il pulsante Ok" o "ogni 60 secondi".

Ho detto "codice" perché alcuni linguaggi rendono più difficile o più facile passare una funzione, sono bit di codice arbitrari.

    
risposta data 25.09.2018 - 13:28
fonte
-2
function a(f){
f();
}

function b(){
alert("hello");
}

a(b);

Ecco come si passa una funzione come argomento a un'altra funzione. Lo incontrerete frequentemente lavorando in ES5 JS, sono sorpreso che non siate in ES6 lamdas e non sempre appropiate.

    
risposta data 25.09.2018 - 09:55
fonte

Leggi altre domande sui tag