Descrivere l'hosting in javascript in una frase significa che le variabili e le funzioni sono innalzate in cima all'ambito in cui sono dichiarate.
Presumo che tu sia un principiante, per capire correttamente il sollevamento all'inizio abbiamo capito la differenza tra undefined e ReferenceError
var v;
console.log(v);
console.log(abc);
ora nel codice qui sotto cosa vediamo? una variabile e un'espressione di funzione è decleard.
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
ma l'immagine reale con la prova che sia la variabile che la funzione sono sollevate in cima a questo ambito:
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));
L'output dei primi due log non è definito e TypeError: getSum non è una funzione perché sia var totalAmo che getSum sono posizionati in cima al loro ambito come sotto
<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>
Ma per la dichiarazione di funzioni, intere funzioni vengono poste in cima al loro ambito.
console.log(getId());
function getId(){
return 739373;
}
Ora la stessa logica vale per quelle varibale, le esperienze di funzioni e le dichiarazioni di funzione dichiarate all'interno dell'ambito funzionale. Punto chiave: non verranno issati in cima alla lima ;
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;
}
}
Quindi, quando usi la parola chiave var , la variabile e la funzione posizionati in cima allo scope (ambito globale e ambito della funzione). Che dire di let e const , const e let sono ancora entrambi consapevoli dell'ambito globale e dell'ambito della funzione proprio come lo è var, ma le variabili const e let sono anche consapevoli di un altro ambito chiamato ambito bloccato. uno scope di blocco è presente ogni volta che c'è un blocco di codice, come for loop, if else, while loop ecc.
Quando usiamo const e let per dichiarare una variabile in questo ambito di blocco, la dichiarazione della variabile verrà posizionata solo in cima a quel blocco in cui si trova, e non sarà in cima alla funzione genitore o in cima al portata globale che viene sollevata.
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
Le variabili nell'esempio di Adobe verranno sollevate come sotto
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;
}