Pour décrire l'hébergement en javascript en une phrase, les variables et les fonctions sont hissées au sommet de la portée dans laquelle elles sont déclarées.
Je suppose que vous êtes un débutant, pour bien comprendre le levage au début, nous avons compris la différence entre undefined et ReferenceError
var v;
console.log(v);
console.log(abc);
/*
The output of the above codes are:
undefined
ReferenceError: abc is not defined*/
maintenant dans le code ci-dessous ce que nous voyons? une variable et une expression de fonction sont décleard.
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
mais l'image réelle avec la preuve que la variable et la fonction sont hissées au-dessus de la portée:
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
La sortie des deux premiers journaux n'est pas définie et TypeError: getSum n'est pas une fonction car var totalAmo et getSum sont hissés au sommet de leur portée comme ci-dessous
<script>
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
</script>
Mais pour les fonctions de déclaration, des fonctions entières hissées au sommet de leur portée.
console.log(getId());
function getId(){
return 739373;
}
/* output: 739373, because the whole function hoisted on the top of the scope.*/
Maintenant, la même logique s'applique aux varibales, aux expériences de fonctions et aux déclarations de fonctions déclarées dans la portée fonctionnelle. Point clé: ils ne seront pas hissés en haut du dossier ;
function functionScope(){
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
}
Ainsi, lorsque vous utilisez le mot clé var , la variable et la fonction hissées en haut de la portée (portée globale et portée de la fonction). Qu'en est-il de let et const , const et let sont toujours conscients de la portée globale et de la portée de la fonction, tout comme var l'est, mais les variables const et let sont également conscientes d'une autre portée appelée portée bloquée. une portée de bloc est présente chaque fois qu'il y a un bloc de code, comme une boucle for, une instruction if else, une boucle while, etc.
Lorsque nous utilisons const et laissons déclarer une variable dans la portée de ces blocs, seule la déclaration de variable sera hissée en haut du bloc dans lequel elle se trouve, et elle ne sera pas hissée en haut de la fonction parent ou en haut de la portée mondiale qu’elle est hissée.
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
Les variables de l'exemple abobe seront hissées comme ci-dessous
function getTotal(){
let total;
var multiplier;
total = 0;
for(var i = 0; i<10; i++){
let valueToAdd;
valueToAdd = i;
multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}