Poiché non è chiaro quale parte di questo ti confonda, facciamo questo passo dopo passo.
1) Boolean
è una funzione. In questo caso, accetta un argomento e ritorna vero o falso a seconda che l'argomento sia vero o falso. Quindi, se aiuta, puoi sostituire Boolean
con function(x) { return !!x; }
e ottenere più o meno lo stesso comportamento.
2) Questa riga:
noisy(Boolean)(0);
è intercambiabile con:
var func = noisy(Boolean);
func(0);
Supponendo che l'identificatore func
non sia utilizzato in nessun'altra parte del tuo codice.
3) noisy(Boolean)
chiama ovviamente la funzione noisy
, con f
impostata sulla funzione Boolean
. La chiamata a noisy
restituisce quindi una funzione come questa:
function(arg) {
console.log("calling with", arg);
var val = Boolean(arg);
console.log("called with", arg, "- got", val);
return val;
}
4) La funzione restituita da noisy
viene quindi chiamata con 0
come valore di arg
. Ciò fa efficacemente quanto segue:
console.log("calling with", 0);
var val = Boolean(0);
console.log("called with", 0, "- got", val);
return val;
5) Se il n. 1 aveva senso, non dovrebbe sorprendere che Boolean(0)
valuti a false
. Da lì dovrebbe essere ovvio perché l'output è quello che è.