In http://eloquentjavascript.net/1st_edition/chapter6.html, c'è il seguente esempio:Come vengono gestiti i parametri durante il passaggio delle funzioni in Javascript?
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
alert(isNotNaN(NaN));
Conoscendo solo Javascript di base e programmazione imperativa, Stumped da questo stile di programmazione. Qualcuno può aiutarmi a capire cosa succede durante il runtime.
Ho passato il codice e controllato le variabili e ho scoperto che il valore di x
è NaN
. Come fa a sapere che l'argomento isNaN
deve essere passato come argomento x
della funzione anonima? In primo luogo, perché il parametro attuale NaN di isNaN
diventa isNaN
(ad esempio, mentre isNaN
si aspetta un argomento, perché lo prende dall'argomento di isNotNaN
)?
* "In primo luogo, perché il parametro attuale' NaN' di 'isNotNaN' diventano l'argomento' isNaN'" * A causa della terza linea:' func (x) '. 'func' è un riferimento a' isNaN' e 'x' è' NaN'. Questo non è molto diverso da qualsiasi altra funzione E.g. in 'function foo (x) {return bar (x); }; pippo (x) ',' pippo' passa 'x' a' bar'. L'unica differenza nel tuo esempio è che 'func' è determinato dinamicamente. –
** nota ** questa funzione 'negate' funziona correttamente solo con funzioni che richiedono un solo parametro – Grundy