suchen
HeimWeb-Frontendjs-TutorialFolgen Sie mir, um Javascript-Var-Voranalysen und die Verbesserung der Funktionsdeklaration zu erlernen_Javascript-Fähigkeiten

1. Var-Variablen-Vorkompilierung

Die Syntax von JavaScript ähnelt C, Java und C# und wird zusammenfassend als C-ähnliche Syntax bezeichnet. Studierende mit Erfahrung in der C- oder Java-Programmierung sollten mit der Regel „Zuerst deklarieren, später verwenden“ vertraut sein. Wenn Sie nicht deklarierte Variablen oder Funktionen verwenden, wird während der Kompilierungsphase ein Fehler gemeldet. Allerdings kann JavaScript Variablen und Funktionen verwenden, bevor sie deklariert werden. Schauen wir uns das Geheimnis unten genauer an.

Schauen wir uns zunächst einen Code an:

(function() {
 console.log(noSuchVariable);//ReferenceError: noSuchVariable is not defined
})();

Führen Sie den obigen Code aus und es wird sofort ein Fehler gemeldet. Dies ist jedoch genau das, was wir erwartet haben, da die Variable noSuchVariable überhaupt nicht definiert wurde! Schauen wir uns den folgenden Code an:

(function() {
 console.log(declaredLater); //undefined
 var declaredLater = "Now it's defined!";
 console.log(declaredLater);// "Now it's defined!"
})();

Zuallererst ist der obige Code korrekt und es liegt kein Problem vor. Aber warum wird kein Fehler gemeldet? Die Variable „declaredLater“ wird nach der aufrufenden Anweisung definiert? Warum ist die Ausgabe undefiniert?

Dies wird tatsächlich durch den JavaScript-Parser verursacht. Der Parser platziert alle im aktuellen Bereich deklarierten Variablen und Funktionen an den Anfang des Bereichs bleiben an Ort und Stelle. Der obige Code sieht für den Parser tatsächlich so aus:

(function() {
 var declaredLater; //声明被提前到作用域开始处了!
 console.log(declaredLater); // undefined
 declaredLater = "Now it's defined!"; //赋值操作还在原地!
 console.log(declaredLater);//"Now it's defined!"
})();

Aus diesem Grund meldet der obige Code keine Ausnahme! Nachdem Variablen und Funktionen „erweitert“ wurden, wird die Variable „declaredLater“ tatsächlich vor der aufrufenden Funktion platziert. Gemäß der Definition der JavaScript-Syntax werden Variablen, die deklariert, aber nicht zugewiesen wurden, automatisch undefiniert zugewiesen Der Wert der Variable „declaredLater“ ist undefiniert. Später haben wir der Variablen „declaredLater“ einen Wert zugewiesen. Wenn wir die Variable also zum zweiten Mal drucken, wird „Jetzt ist sie definiert“ ausgegeben.

Sehen wir uns ein anderes Beispiel an:

var name = "Baggins";
(function () {
 console.log("Original name was " + name);// "Original name was undefined"
 var name = "Underhill";
 console.log("New name is " + name);// "New name is Underhill"
})();

Im obigen Code deklarieren wir zunächst einen Variablennamen. Unsere ursprüngliche Absicht besteht darin, die im globalen Bereich definierte Namensvariable auszugeben, wenn die Namensvariable zum ersten Mal gedruckt wird, und dann eine lokale Namensvariable in der Funktion zu definieren Decken Sie die globalen Variablen ab und geben Sie schließlich den Wert der lokalen Variablen aus. Das erste Ausgabeergebnis stimmt jedoch überhaupt nicht mit unseren Erwartungen überein. Der Grund dafür ist, dass die von uns definierten lokalen Variablen innerhalb ihres Gültigkeitsbereichs „erweitert“ sind, das heißt, sie haben die folgende Form:

var name = "Baggins";
(function () {
 var name; //注意:name 变量被提前了!
 console.log("Original name was " + name);// "Original name was undefined"
 name = "Underhill";
 console.log("New name is " + name);//"New name is Underhill"
})();

Da JavaScript solche „Macken“ aufweist, wird empfohlen, die Variablendeklaration oben im Gültigkeitsbereich zu platzieren, damit Sie sich immer daran erinnern können, aufmerksam zu sein.

2. Funktionsdeklaration ist „erweitert“

Worüber ich vorhin gesprochen habe, sind Variablen, als Nächstes sprechen wir über Funktionen.

Es gibt zwei Situationen, in denen eine Funktion „erweitert“ ist: eine ist die Funktionsdeklaration und die zweite ist die Zuweisung einer Funktion zu einer Variablen als Wert, also als Funktionsausdruck.

Lassen Sie uns zunächst über die erste Situation sprechen, den Code:

isItHoisted();//"Yes!"
function isItHoisted() { 
 console.log("Yes!");
}

Wie oben gezeigt, ermöglicht Ihnen der JavaScript-Interpreter die Verwendung vor der Funktionsdeklaration. Mit anderen Worten: Die Funktionsdeklaration ist nicht nur der Funktionsname, der „erweitert“ ist, sondern die gesamte Funktionsdefinition ist auch „erweitert“! Damit der obige Code korrekt ausgeführt werden kann.

Sehen wir uns den zweiten Fall an: Funktionsausdrucksform. Beginnen wir mit dem Code:

definitionHoisted();// "Definition hoisted!"
definitionNotHoisted();// TypeError: undefined is not a function
function definitionHoisted() { 
 console.log("Definition hoisted!");
}
var definitionNotHoisted = function () { 
 console.log("Definition not hoisted!");
};

Wir haben einen Vergleich durchgeführt, der dem ersten Typ entspricht. Die Variable definitionNotHoisted war jedoch nicht erweitert Das heißt, es stimmt vollständig mit der „Vorwärtsbewegung“ der Variablen überein, über die wir zuvor gesprochen haben, und da der Standardwert der Variablen „Vorwärtsbewegung“ undefiniert ist, gehört der gemeldete Fehler zur „Typinkongruenz“, da undefiniert keine Funktion ist. kann natürlich nicht aufgerufen werden.

Zusammenfassung
Durch die obige Erklärung kann es wie folgt zusammengefasst werden:

Die Variablendeklaration wird an die Spitze des Gültigkeitsbereichs verschoben und die Zuweisung bleibt bestehen
Die gesamte Funktionsdeklaration ist „erweitert“
Bei Verwendung eines Funktionsausdrucks ist nur die Variable „erweitert“, die Funktion ist nicht „erweitert“
3. Nebenwirkungen von Var

Ein kleiner Unterschied zwischen impliziten globalen Variablen und explizit definierten globalen Variablen besteht in der Möglichkeit, Variablen über den Löschoperator undefiniert zu lassen.

Globale Variablen, die über var erstellt wurden (in einem Programm außerhalb von Funktionen erstellt), können nicht gelöscht werden.
Implizite globale Variablen, die ohne var erstellt wurden (unabhängig davon, ob sie in einer Funktion erstellt wurden), können gelöscht werden.
Dies zeigt, dass implizite globale Variablen technisch gesehen keine wirklichen globalen Variablen sind, sondern Eigenschaften des globalen Objekts. Attribute können über den Löschoperator gelöscht werden, Variablen jedoch nicht:

// 定义三个全局变量
var global_var = 1;
global_novar = 2;  // 反面教材
(function () {
 global_fromfunc = 3; // 反面教材
}());

// 试图删除
delete global_var;  // false
delete global_novar; // true
delete global_fromfunc; // true

// 测试该删除
typeof global_var;  // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"

在ES5严格模式下,未声明的变量(如在前面的代码片段中的两个反面教材)工作时会抛出一个错误。

4、单var形式声明变量

在函数顶部使用单var语句是比较有用的一种形式,其好处在于:

提供了一个单一的地方去寻找功能所需要的所有局部变量
防止变量在定义之前使用的逻辑错误
少代码(类型啊传值啊单线完成)
单var形式长得就像下面这个样子:

function func() {
 var a = 1,
  b = 2,
  sum = a + b,
  myobject = {},
  i,
  j;
 // function body...
}

您可以使用一个var语句声明多个变量,并以逗号分隔。像这种初始化变量同时初始化值的做法是很好的。这样子可以防止逻辑错误(所有未初始化但声明的变量的初始值是undefined)和增加代码的可读性。在你看到代码后,你可以根据初始化的值知道这些变量大致的用途。

以上就是针对javascript的var预解析与函数声明提升的学习内容,希望对大家的学习有所帮助。

Stellungnahme
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
Python gegen JavaScript: Eine vergleichende Analyse für EntwicklerPython gegen JavaScript: Eine vergleichende Analyse für EntwicklerMay 09, 2025 am 12:22 AM

Der Hauptunterschied zwischen Python und JavaScript sind die Typ -System- und Anwendungsszenarien. 1. Python verwendet dynamische Typen, die für wissenschaftliche Computer- und Datenanalysen geeignet sind. 2. JavaScript nimmt schwache Typen an und wird in Front-End- und Full-Stack-Entwicklung weit verbreitet. Die beiden haben ihre eigenen Vorteile bei der asynchronen Programmierung und Leistungsoptimierung und sollten bei der Auswahl gemäß den Projektanforderungen entschieden werden.

Python vs. JavaScript: Auswählen des richtigen Tools für den JobPython vs. JavaScript: Auswählen des richtigen Tools für den JobMay 08, 2025 am 12:10 AM

Ob die Auswahl von Python oder JavaScript vom Projekttyp abhängt: 1) Wählen Sie Python für Datenwissenschafts- und Automatisierungsaufgaben aus; 2) Wählen Sie JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung. Python ist für seine leistungsstarke Bibliothek in der Datenverarbeitung und -automatisierung bevorzugt, während JavaScript für seine Vorteile in Bezug auf Webinteraktion und Full-Stack-Entwicklung unverzichtbar ist.

Python und JavaScript: Verständnis der Stärken der einzelnenPython und JavaScript: Verständnis der Stärken der einzelnenMay 06, 2025 am 12:15 AM

Python und JavaScript haben jeweils ihre eigenen Vorteile, und die Wahl hängt von den Projektbedürfnissen und persönlichen Vorlieben ab. 1. Python ist leicht zu erlernen, mit prägnanter Syntax, die für Datenwissenschaft und Back-End-Entwicklung geeignet ist, aber eine langsame Ausführungsgeschwindigkeit hat. 2. JavaScript ist überall in der Front-End-Entwicklung und verfügt über starke asynchrone Programmierfunktionen. Node.js macht es für die Entwicklung der Vollstapel geeignet, die Syntax kann jedoch komplex und fehleranfällig sein.

JavaScripts Kern: Ist es auf C oder C aufgebaut?JavaScripts Kern: Ist es auf C oder C aufgebaut?May 05, 2025 am 12:07 AM

JavaScriptisnotbuiltoncorc; Es ist angehört, dass sich JavaScriptWasdedeSthatrunsonGineoFtencninc.

JavaScript-Anwendungen: Von Front-End bis Back-EndJavaScript-Anwendungen: Von Front-End bis Back-EndMay 04, 2025 am 12:12 AM

JavaScript kann für die Entwicklung von Front-End- und Back-End-Entwicklung verwendet werden. Das Front-End verbessert die Benutzererfahrung durch DOM-Operationen, und die Back-End-Serveraufgaben über node.js. 1. Beispiel für Front-End: Ändern Sie den Inhalt des Webseitentextes. 2. Backend Beispiel: Erstellen Sie einen Node.js -Server.

Python vs. JavaScript: Welche Sprache sollten Sie lernen?Python vs. JavaScript: Welche Sprache sollten Sie lernen?May 03, 2025 am 12:10 AM

Die Auswahl von Python oder JavaScript sollte auf Karriereentwicklung, Lernkurve und Ökosystem beruhen: 1) Karriereentwicklung: Python ist für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet, während JavaScript für die Entwicklung von Front-End- und Full-Stack-Entwicklung geeignet ist. 2) Lernkurve: Die Python -Syntax ist prägnant und für Anfänger geeignet; Die JavaScript -Syntax ist flexibel. 3) Ökosystem: Python hat reichhaltige wissenschaftliche Computerbibliotheken und JavaScript hat ein leistungsstarkes Front-End-Framework.

JavaScript -Frameworks: Stromversorgung moderner WebentwicklungJavaScript -Frameworks: Stromversorgung moderner WebentwicklungMay 02, 2025 am 12:04 AM

Die Kraft des JavaScript -Frameworks liegt in der Vereinfachung der Entwicklung, der Verbesserung der Benutzererfahrung und der Anwendungsleistung. Betrachten Sie bei der Auswahl eines Frameworks: 1. Projektgröße und Komplexität, 2. Teamerfahrung, 3. Ökosystem und Community -Unterstützung.

Die Beziehung zwischen JavaScript, C und BrowsernDie Beziehung zwischen JavaScript, C und BrowsernMay 01, 2025 am 12:06 AM

Einführung Ich weiß, dass Sie es vielleicht seltsam finden. Was genau muss JavaScript, C und Browser tun? Sie scheinen nicht miteinander verbunden zu sein, aber tatsächlich spielen sie eine sehr wichtige Rolle in der modernen Webentwicklung. Heute werden wir die enge Verbindung zwischen diesen drei diskutieren. In diesem Artikel erfahren Sie, wie JavaScript im Browser ausgeführt wird, die Rolle von C in der Browser -Engine und wie sie zusammenarbeiten, um das Rendern und die Interaktion von Webseiten voranzutreiben. Wir alle kennen die Beziehung zwischen JavaScript und Browser. JavaScript ist die Kernsprache der Front-End-Entwicklung. Es läuft direkt im Browser und macht Webseiten lebhaft und interessant. Haben Sie sich jemals gefragt, warum Javascr

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor