Aby opisać hosting w javascript w jednym zdaniu, zmienne i funkcje są podnoszone na początek zakresu, w którym są zadeklarowane.
Zakładam, że jesteś początkującym, aby najpierw dobrze zrozumieć podnoszenie, zrozumieliśmy różnicę między undefined a ReferenceError
var v;
console.log(v);
console.log(abc);
teraz w kodzie poniżej, co widzimy? zmienna i wyrażenie funkcyjne jest decleard.
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
ale prawdziwy obraz z dowodem, że zarówno zmienna, jak i funkcja znajdują się na szczycie tego zakresu:
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));
Dane wyjściowe pierwszych dwóch dzienników są niezdefiniowane, a TypeError: getSum nie jest funkcją, ponieważ zarówno var totalAmo, jak i getSum są umieszczone na szczycie zakresu, jak poniżej
<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>
Ale w przypadku deklaracji funkcji całe funkcje zostały podniesione na szczycie ich zakresu.
console.log(getId());
function getId(){
return 739373;
}
Teraz ta sama logika dotyczy tych wariacji, wyrażeń funkcji i deklaracji funkcji zadeklarowanych w zakresie funkcjonalnym. Kluczowa kwestia: nie będą podnoszone na górze pliku ;
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;
}
}
Tak więc, gdy używasz słowa kluczowego var , zmiennej i funkcji podniesionych na górze zakresu (zakres globalny i zakres funkcji). A co z let i const , const i let nadal są świadome zasięgu globalnego i zakresu funkcji, podobnie jak var, ale zmienne const i let są również świadome innego zakresu zwanego zakresem blokowanym. zasięg blokowy jest obecny zawsze, gdy istnieje blok kodu, taki jak pętla for, instrukcja if else, pętla while itp.
Kiedy używamy const i pozwalamy zadeklarować zmienną w tym zakresie blokowym, deklaracja zmiennej zostanie podniesiona tylko na górę tego bloku, w którym się znajduje, i nie zostanie podniesiona na górę funkcji nadrzędnej lub górnej części zasięg globalny, że jest podnoszony.
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
Zmienne w powyższym przykładzie zostaną podniesione jak poniżej
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;
}