Fonction dans si condition clause

J'ai reçu cette fonction pour prédire la sortie. C'est une erreur de refrence, je me demande toujours pourquoi?

if(function x(){console.log("ABC");}) { x(); } 

J'espère que quelqu'un peut éclairer la portée lexicale. Merci d'avance.

Ce que vous avez là est une expression de fonction , même si elle est nommée , et vous n'êtes pas attribuer cette expression à quoi que ce soit. Le fait que vous le nommez x ne signifie pas qu'une fonction x sera hissée dans la portée, car cela ne fonctionne pas pour les expressions .

 function foo() {} // function declaration (function bar() {}); // named function expression, the () makes it not-a-statement here foo(); // ok bar(); // doesn't exist 

En effet, vous ne déclarez jamais une fonction x , c'est pourquoi aucune n'existe lorsque vous essayez de l'appeler.