volte sollevamento è spiegato in un modo che può dare un'impressione sbagliata, cioè le variabili e le funzioni vengono issate dal motore JavaScript come se fossero fisicamente spostati sulla parte superiore, che non è in realtà proprio, come dimostra il codice qui sotto:
console.log(a);
var a = 'Hello World!';
Quello che vediamo sullo schermo è undefined
, non 'Hello World'
, quindi abbiamo ottenuto la Beha vior del seguente codice
var a;
console.log(a);
a = 'Hello World!';
non il comportamento di
var a = 'Hello World!';
console.log(a);
che si può avere l'impressione dalla dichiarazione variabili e funzioni viene spostato alla dichiarazione top.
Ma JavaScript non sta effettivamente spostando il codice da nessuna parte. Devi capire il contesto di esecuzione in JavaScript. Ha due fasi di fase di creazione e fase di esecuzione. Nella fase di creazione viene creato uno spazio di memoria per queste variabili e funzioni, e le persone sembrano confondere questo passaggio con il sollevamento. JavaScript non sta effettivamente spostando il tuo codice da nessuna parte, ciò che accade è che JavaScript ha creato spazio di memoria per tutto il codice, cioè variabili e funzioni, le funzioni possono essere posizionate completamente nella memoria, ma in caso di variabili le assegnazioni vengono elaborate in fase di esecuzione del contesto di esecuzione. Quindi, quando esegui var a = 'Hello World!'
, il motore JavaScript riconosce il valore di a
quando inizia ad eseguirlo nella fase di esecuzione del contesto di esecuzione, quindi inserisce un segnaposto non definito e tutte le variabili inizialmente non sono definite in JavaScript. Quindi non è bene fare affidamento sul sollevamento e vedere indefinito. Quindi è sempre bene dichiarare variabili e funzioni in cima al tuo codice.
fonte
2015-09-09 09:32:50
Sono spaventato, confuso e leggermente incuriosito ... cosa stai cercando di complice? –
@Hahsen, sto solo cercando di capire vari browser e javascript disponibili. Questo è un sollevamento variabile e sto cercando di capire il suo comportamento nell'ambito globale insieme a una dichiarazione di ritorno. Sebbene return non sia permesso quando non si è in definizione di funzione ma il codice funziona ancora in chrome e safari. Sto cercando di scoprire il motivo – alter
Potrebbe essere più facile capirlo come variabile e dichiarazione * pre-elaborazione *. Le dichiarazioni non vengono spostate (o "issate in cima"), vengono elaborate prima dell'esecuzione di qualsiasi codice. Leggi ECMA-262 §10.3 su cosa succede quando si entra in un contesto di esecuzione, è ragionevolmente facile da capire. – RobG