Parfois levage est expliqué d'une manière qui peut donner une fausse impression, à savoir les variables et les fonctions sont hissés par le moteur JavaScript comme si elles étaient déplacés physiquement sur le dessus, ce qui est en fait juste, comme le montre le code ci-dessous:
console.log(a);
var a = 'Hello World!';
Ce que nous voyons sur la console est undefined
, pas 'Hello World'
, donc nous avons eu la Beha Vior du code ci-dessous
var a;
console.log(a);
a = 'Hello World!';
pas le comportement de
var a = 'Hello World!';
console.log(a);
que vous pouvez avoir l'impression de la déclaration des variables et des fonctions déplacé à la déclaration haut.
Mais JavaScript ne déplace pas votre code n'importe où. Vous devez comprendre le contexte d'exécution en JavaScript. Il a deux phases de phase de création et de phase d'exécution. En phase de création, de l'espace mémoire est créé pour ces variables et fonctions, et les gens semblent confondre cette étape avec le levage. JavaScript ne déplace pas votre code, JavaScript crée un espace mémoire pour toutes vos variables et fonctions, les fonctions peuvent être placées en mémoire mais dans le cas de variables, les affectations sont traitées en phase d'exécution du contexte d'exécution. Donc quand vous faites var a = 'Hello World!'
, le moteur JavaScript connaît la valeur de a
quand il commence à l'exécuter en phase d'exécution du contexte d'exécution, donc il place un espace réservé indéfini, et toutes les variables sont initialement définies à indéfini en JavaScript. Il n'est donc pas bon de compter sur le levage et voir indéfini. Il est donc toujours bon de déclarer des variables et des fonctions au-dessus de votre code.
Je suis effrayée, confuse et légèrement intriguée ... qu'est-ce que vous essayez de complice? –
@Hahsen, j'essaie juste de comprendre les divers gotchas de navigateur et de javascript disponibles. C'est une opération de levage variable et j'essaie de comprendre son comportement dans une portée globale avec une déclaration de retour. Bien que le retour ne soit pas autorisé quand vous n'êtes pas dans la définition de fonction mais que le code fonctionne en chrome et safari.J'essaie de trouver la raison – alter
Il pourrait être plus facile de le comprendre comme variable et déclaration * pré-traitement *. Les déclarations ne sont pas déplacées (ou "hissées en haut"), elles sont traitées avant que le code ne soit exécuté. Lire ECMA-262 §10.3 sur ce qui se passe lors de la saisie d'un contexte d'exécution, il est raisonnablement facile à comprendre. – RobG