j'ai écrit une fonction simple qui se réduit à néant après son premier appel:Pourquoi cette expression javascript est-elle évaluée à false?
var nullify = function(){
nullify = null;
return 1;
};
Si je l'appelle deux fois, comme celui-ci:
console.log(nullify());
console.log(nullify);
Puis la 1ère expression retournera 1
, et l'autre évaluera à null
. Tout est clair jusqu'à ce point.
Si je le fais cependant dans une seule expression et l'envelopper dans une fonction:
var fun = function(f){
return f() && !f;
}
Puis, pour une raison quelconque:
console.log(fun(nullify));
évalue à false
, alors que je me attends à être true
, puisque le 1er opérande retournera 1
et l'autre, comme une négation de null
, true
.
L'évaluation de l'opérande de droite se produit lorsque la fonction nullify
a déjà été appelée nullify = null
, n'est-ce pas? Qu'est-ce que je rate?
Testé moi-même, je reçois 'true'. –
D'accord, j'ai fait une erreur, une seconde je édite –
Les affectations sont faites par valeur, pas par référence. – Oriol