0
votes

La sortie donne "1NEDEFINÉ" pour quelque chose qui devrait être "1 fonction" à coup sûr. Où est l'erreur?

L'exemple ci-dessous doit sortir à sa fonction, comme la valeur de x est "1" (entier), puis nous passons un paramètre nommé "F" (d'une fonction). Peu importe que cette fonction fait quelque chose ou est vide, mais je suis sûr - cette variable f -> pointe de fonctionner. donc typeof (f) code> renvoie sûrement fonctionner code>.

maintenant, l'ajout d'un entier et "fonction" (comme typeof renvoie toujours une chaîne) va être un String -> 1fonction. P>

Maintenant, incroyablement la sortie est "1duefinine". Comment? p>

p>

<script>

var x = 1;
if (y = 2) {
x = x + y; 
}
console.log(x);

</script>


0 commentaires

3 Réponses :


1
votes

Vous obtenez non défini code> car fonction f code> n'est pas défini dans le code nulle part. Écrire la fonction code> à l'intérieur d'un Si l'instruction code> ne définit pas la fonction code>. Le code l'assume juste comme une valeur de contrôle, une condition pour la déclaration IF mais en réel F code> n'existe pas. Vous pouvez définir f code> à l'extérieur et cela fonctionnera bien ou vous pouvez simplement effectuer l'affectation dans le si, puis aussi, il fonctionnera

p>

var x = 1;
if (f=function(){}) {
  x += typeof f;
}
console.log(x);


2 commentaires

S'il vous plaît voir la question mise à jour. Votre logique ne semble pas en forme pour tous les cas ... étrangement!


Dans votre deuxième extrait, vous attribuez une valeur, puis utilisez-la qui fonctionne. Voir les modifications. Lorsque vous attribuez une fonction, cela fonctionnera également. Si vous définissez simplement Y dans la déclaration IF et ne cédez aucune valeur, cela donnera une erreur aussi. C'est la différence entre vos deux extraits



-2
votes

var x = 1;
var f;
if ( f = function() {} ) {
    x += typeof f;
}
console.log(x);


1 commentaires

Je sais que. Mais, il suffit de demander pourquoi dans l'exemple donné, la sortie est telle; Non comment pouvons-nous apporter le résultat requis (que nous voulons).



3
votes
(f = function f(){})

9 commentaires

Donc, le cas est différent si nous passons une variable faisant référence à la chaîne, au booléen, au nombre, au tableau ou non défini? Comme y = 3 ou z = "peter" ? Alors Y & Z existent dans le monde réel mais pas si nous passons la fonction f () {} --- Je suppose avec les mêmes règles que nous avons déjà donné un nom f à une fonction . N'avons-nous pas?


@Deadpool - Les fonctions ne sont pas des variables.


d'accord. Les moyens d'affectation sont puissants puissants et rendraient logiquement une variable existent que la fonction d'écriture FUNC () {} ---- Signification Func n'existe jamais? Je pensais que c'est une autre façon de créer une variable, disons Func qui pointera sur l'emplacement de la mémoire contenant des données de fonction. N'est-ce pas?


"Signification Func n'existe jamais" - la fonction existe.


"Je pensais que ceci est une autre façon de créer une variable, disons Func qui pointera sur l'emplacement de la mémoire contenant des données de fonction." - JavaScript n'est pas l'assemblée que vous ne traitez pas directement avec des emplacements de mémoire. J'ai expliqué la différence entre une expression de fonction et une déclaration de fonction dans la première section de cette réponse.


Yah, j'ai nommé ma fonction Func ci-dessus! Fonction Func () {}


Pourquoi f non hissé ici? Quelque chose comme Ce


Les expressions de fonctions ne sont pas hissées (et puisque j'ai déjà dit qu'ils ne créent pas une variable f dans la portée extérieure ... Qu'est-ce que le hisser faire quand même ?!)


Je t'ai eu. Donc, si (fonction f () {}) est une déclaration de fonction et non de la déclaration de fonction.