Heim > Web-Frontend > js-Tutorial > Hauptteil

Eine kurze Analyse des Problems beim Heben von Variablendeklarationen in JavaScript (Hoisting)

高洛峰
Freigeben: 2016-12-03 13:45:33
Original
1230 Leute haben es durchsucht

1. Variablendeklaration Heben

Heben Englisch ['hɔɪstɪŋ] US ['hɔɪstɪŋ]

n. Heben, Heben

v. Heben, heben (Partizip Präsens von Heben)

Schauen wir uns zuerst eine Kastanie an

var cc = 'hello';
function foo(){
 console.log(cc);
 var cc = 'world';
 console.log(cc);
}
foo();
console.log(cc);
Nach dem Login kopieren

Hier wird undefiniert ausgegeben, 'Welt', 'Hallo'

Hier gibt es zwei Hauptwissenspunkte:

1. Geltungsbereich

2, Förderung der Variablendeklaration

JavaScript ist eine interpretierte Sprache. Wenn der Code in einer Interpreterumgebung (z. B. der V8-Engine von Chrome) ausgeführt wird, findet ein Voranalyseprozess statt, und dann werden Variablendeklarationen und Funktionsdeklarationen gefördert Dieses Verhalten wird als Deklarationshub bezeichnet.

Wenn Sie sich das obige Beispiel noch einmal ansehen, verfügt dieser Code über zwei Gültigkeitsebenen, den globalen Bereich und den Funktionsbereich foo sowie die Variable Die Deklaration in foo wird während des Voranalysevorgangs an den Anfang des Funktionsbereichs verschoben, sodass der Code wie folgt aussieht:

var cc = 'hello';
function foo(){
 var cc;
 console.log(cc);
 cc = 'world';
 console.log(cc);
}
foo();
console.log(cc);
Nach dem Login kopieren

Wann Das erste Protokoll wird ausgeführt, die Variable cc wird nur deklariert und nicht zugewiesen, sodass das, was gedruckt wird, undefiniert ist

2. Verbesserung der Funktionsdeklaration

Es gibt zwei Möglichkeiten, Funktionen zu deklarieren: Funktionsdeklaration und Funktionsausdruck

// 函数声明
function foo(a, b) {
 return a + b;
}
// 函数表达式
var foo = function(a, b) {
 return a + b;
}
Nach dem Login kopieren

Wenn der Parser Daten in die Ausführungsumgebung lädt, werden die Funktionsausdrücke nicht gleich erstellt. Der Parser liest zunächst die Funktionsdeklaration und macht sie verfügbar (zugänglich), bevor er Code ausführt. Der Funktionsausdruck wird erst dann tatsächlich interpretiert und ausgeführt, wenn der Parser die Codezeile erreicht, in der er sich befindet.

Natürlich können auch Funktionsdeklarationen und Funktionsausdrücke gleichzeitig verwendet werden, z. B. var a = function b(){} Das Ergebnis ist, dass es nur die Wirkung eines Funktionsausdrucks hat b wird automatisch ignoriert, sodass nur ein variabler Boost-Effekt auftritt.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage