Um das Hosting in Javascript in einem Satz zu beschreiben, werden Variablen und Funktionen an die Spitze des Bereichs angehoben, in dem sie deklariert sind.
Ich gehe davon aus, dass Sie ein Anfänger sind. Um das Heben zuerst richtig zu verstehen, haben wir den Unterschied zwischen undefiniert und ReferenceError verstanden
var v;
console.log(v);
console.log(abc);
/*
The output of the above codes are:
undefined
ReferenceError: abc is not defined*/
Was sehen wir jetzt im folgenden Code? Eine Variable und ein Funktionsausdruck werden deklariert.
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
aber das wirkliche Bild mit dem Beweis, dass sowohl die Variable als auch die Funktion oben in ihrem Bereich angehoben sind:
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));
Die Ausgabe der ersten beiden Protokolle ist undefiniert und TypeError: getSum ist keine Funktion, da sowohl var totalAmo als auch getSum wie unten oben in ihrem Bereich angezeigt werden
<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>
Bei der Funktionsdeklaration werden jedoch ganze Funktionen über ihren Geltungsbereich angehoben.
console.log(getId());
function getId(){
return 739373;
}
/* output: 739373, because the whole function hoisted on the top of the scope.*/
Dieselbe Logik gilt nun für die Varibale, Funktionserfahrungen und Funktionsdeklarationen, die innerhalb des Funktionsumfangs deklariert wurden. Wichtigster Punkt: Sie werden nicht oben in die Datei gehievt .
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;
}
}
Wenn Sie also das Schlüsselwort var verwenden , werden Variable und Funktion oben im Bereich des Bereichs (globaler Bereich und Funktionsbereich) angezeigt. Was ist mit let und const , const und let sind sich immer noch des globalen Bereichs und des Funktionsbereichs bewusst, genau wie var, aber const- und let-Variablen kennen auch einen anderen Bereich, der als blockierter Bereich bezeichnet wird. Ein Blockbereich ist immer dann vorhanden, wenn ein Codeblock vorhanden ist, z. B. for-Schleife, if else-Anweisung, while-Schleife usw.
Wenn wir const und let verwenden, um eine Variable in diesem Blockbereich zu deklarieren, wird die Variablendeklaration nur über dem Block angehoben, in dem sie sich befindet, und nicht über der übergeordneten Funktion oder über dem globaler Umfang, dass es gehisst wird.
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
Variablen im Abobe-Beispiel werden wie unten angehoben
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;
}