Il y a un bon article par Angus Croll sur la différence entre une déclaration de fonction et une expression de fonction en javascript (https://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/)
Fondamentalement, ce que vous essayez de faire est de traiter la fonction cachée() comme une déclaration de fonction à l'intérieur d'une expression de fonction. Comme l'indique Croll dans l'article, à l'intérieur d'une expression de fonction, "le nom de la fonction (le cas échéant) n'est pas visible en dehors de sa portée (contrairement aux déclarations de fonctions)."
Si vous réécrivez la fonction anonyme comme une mission, il fait le point plus clair, je pense:
var a = function hidden() {
console.log('inside hidden');
}
maintenant cela erreur:
var a = function hidden() {
console.log('inside hidden');
}
hidden();
parce que le nom de la fonction n'est pas disponible à l'extérieur de son propre contexte.
Cependant, cela fonctionne très bien:
var a = function hidden() {
console.log('inside hidden');
}
a();
puisque la variable peut être référencée en dehors de son propre contexte que vous attendez (sinon il ne serait pas accessible partout, mais à l'intérieur du corps de la fonction cachée()) .
Si nous regardons à nouveau la version anonyme vous pouvez voir pourquoi il échoue:
(function hidden() {
console.log('inside hidden');
}
// We're outside of IIFEs function body here
// so NO code can be executed.
)();
Qu'est-ce que vous essayez de atteindre avec le deuxième morceau de code? – Icepickle
"il y a une erreur qui indique que hidden est un identifiant inattendu." --- Non, le message d'erreur ne dit pas cela. – zerkms
votre deuxième bloc de code n'est pas valide du tout - et si vous avez déplacé 'hidden();' dans le '{}' vous vous retrouveriez avec trop de récursion –