Heim Web-Frontend js-Tutorial Verschiedene Fallstricke und Fallstrickmethoden beim Schreiben von JavaScript-Code_Javascript-Fähigkeiten

Verschiedene Fallstricke und Fallstrickmethoden beim Schreiben von JavaScript-Code_Javascript-Fähigkeiten

May 16, 2016 pm 04:45 PM
javascript

Das Wort „Grube“ bedeutet hier „Falle“. Aufgrund der Natur der „schwachen Sprache“ ist JavaScript während der Verwendung äußerst locker und flexibel, aber es ist auch äußerst leicht, in diese Fallstricke zu tappen verborgen, also müssen Sie die Augen offen halten, damit Sie auf dem Weg zum Erlernen und Anwenden von JS reibungslos vorankommen

1. Globale Variablen

JavaScript verwaltet den Umfang durch Funktionen. Innerhalb einer Funktion deklarierte Variablen sind nur innerhalb der Funktion verfügbar und außerhalb der Funktion nicht verfügbar. Andererseits werden globale Variablen außerhalb einer Funktion deklariert oder einfach ohne Deklaration verwendet.

„Einfache Verwendung ohne Deklaration“ bezieht sich auf die Deklaration von Variablen ohne Verwendung des Schlüsselworts var. Wir wissen das bereits sehr gut, um die implizite Generierung globaler Variablen zu vermeiden, indem wir Variablen so oft wie möglich mit dem Schlüsselwort var deklarieren.

Aber denken Sie, dass die Verwendung von var in Ordnung ist? Werfen wir einen Blick auf diese Grube:

Kopieren Sie den Code Der Code lautet wie folgt:

function foo() {
var a = b = 0;
// body...
}

Vielleicht haben Sie zwei lokale Variablen erwartet, aber b ist eine echte globale Variable. Warum? Da Zuweisungsvorgänge von rechts nach links erfolgen, entspricht dies also:

Code kopieren Der Code lautet wie folgt:

function foo() {
var a = (b = 0);
// body...
}

B ist also eine globale Variable.

Füllen Sie die Lücke aus: Variablendeklarationen, am besten einzeln, nicht im Großhandel~_~;

2. Variablendeklaration

Sehen wir uns zunächst die Fallstricke an:

Code kopieren Der Code lautet wie folgt:

myName = "global";

function foo() {
warning(myName);
var myName = "local ";
Alert(myName);
}

foo();

Auf den ersten Blick erwarten wir, dass die Ergebnisse der beiden Alerts „global“ und „lokal“ sind ", aber die realen Ergebnisse sind "undefiniert" und "lokal". Warum? Da sich Variablen im selben Gültigkeitsbereich (dieselbe Funktion) befinden, werden Deklarationen an die Spitze des Gültigkeitsbereichs verschoben und zuerst analysiert.

Das Ausführungsverhalten des obigen Codeausschnitts könnte also wie folgt aussehen:

Kopieren Sie den Code Der Code lautet wie folgt:

function foo() {
var myName;
Alert(myName); // "undefiniert"
myName = "local";
Alert(myName); // "local"
}

Verwenden Sie eine andere Grube, um zu testen, ob Sie Pre-Parsing wirklich verstehen:
Code kopieren Der Code lautet wie folgt:

if (!("a" in window)) {
var a = 1;
}

alert (a);

Die Deklaration einer Variablen wird an den Anfang des Codes verschoben und ihr wurde noch kein Wert zugewiesen. Geben Sie als Nächstes die if-Anweisung im Fenster ein (a wurde als globale Variable deklariert), sodass das Auswertungsergebnis der Beurteilungsanweisung falsch ist und die if-Anweisung direkt übersprungen wird Der Wert von a ist undefiniert.
Code kopieren Der Code lautet wie folgt:

var a; // "undefiniert"
console .log("a" in window); // true

if (!("a" in window)) {
var a = 1; // Nicht ausführen
}

alert(a); // "undefiniert"

Füllen Sie die Variablendeklaration aus, es ist am besten, sie manuell an der Spitze des Bereichs zu platzieren Wird sofort zugewiesen, können Sie es zuerst deklarieren und dann zuweisen.

3. Funktionsdeklaration

Funktionsdeklarationen werden ebenfalls an die Spitze des Gültigkeitsbereichs vorgeschoben, vor allen Ausdrücken und Anweisungen analysiert und ausgewertet

Code kopieren Die Der Code lautet wie folgt:

alert(typeof foo); // "function"

function foo() {
// body...
}

Sie können vergleichen:
Kopieren Sie den Code Der Code lautet wie folgt:

alert(typeof foo); // "undefiniert"

var foo = function () {
// body...
};

Werden Sie, nachdem Sie diese Wahrheit verstanden haben, immer noch in die folgenden Fallstricke geraten?

Code kopieren Der Code lautet wie folgt:

Funktionstest() {
Warnung ("1 ");
}

test();

function test() {
alarm("2");
}

test( );

Führen Sie das obige Code-Snippet aus und die beiden angezeigten Popup-Fenster zeigen „2“ an. Warum sind sie nicht „1“ bzw. „2“? Ganz einfach: Die Testdeklaration wird vor test() geparst, und da letzteres ersteres überschreibt, ist das Ergebnis beider Ausführungen „2“.

Füllen Sie die Lücke aus: In den meisten Fällen verwende ich Funktionsausdrücke anstelle von Funktionsdeklarationen, insbesondere in einigen Anweisungsblöcken.

4. Funktionsausdrücke

Schauen wir uns zunächst benannte Funktionsausdrücke an, zum Beispiel:

Code kopieren Der Code lautet wie folgt:
var bar = function foo() {
// body...
};

Es ist zu beachten, dass der Funktionsname nur innerhalb seiner Funktion sichtbar ist. Zum Beispiel die folgenden Fallstricke:
Code kopieren Der Code lautet wie folgt:

var bar = function foo() {
foo(); // Normaler Betrieb
};

foo(); // Fehler: ReferenceError

Füllen Sie die Lücke: Verwenden Sie benannte Funktionsausdrücke so wenig wie möglich (außer für einige Rekursions- und Debugging-Zwecke) und verwenden Sie Funktionsnamen niemals extern.

5. Selbstausführung von Funktionen

Bei Funktionsausdrücken können Sie diese selbst ausführen, indem Sie () dahinter hinzufügen, und Sie können Parameter in Klammern übergeben, Funktionsdeklarationen jedoch nicht . Fallstrick:

Code kopieren Der Code lautet wie folgt:

// (1) Das ist nur ein Gruppierungsoperationssymbol, kein Funktionsaufruf!
// Die Funktion hier wurde also nicht ausgeführt, es ist immer noch eine Anweisung
function foo(x) {
warning(x);
}(1);

Die folgenden Codeausschnitte sind jeweils Das Popup-Fenster zeigt während der Ausführung „1“ an, da alles vor (1) ein Funktionsausdruck ist, sodass () hier kein Gruppierungsoperator, sondern ein Operator ist, der die Aufrufausführung anzeigt.

Code kopieren Der Code lautet wie folgt:
// Standardanonymer Funktionsausdruck
var bar = function foo(x) {
warning(x);
}(1);

// Die vorherige () wandelt die Funktionsdeklaration in einen Ausdruck um
(function foo(x) {
Alert(x);
})(1);

// Das Ganze () ist der Ausdruck
(function foo(x) {
Alert(x) ;
}(1));

// neuer Ausdruck
neue Funktion foo(x) {
warning(x);
}(1);

// &&, ||, !, , -, ~-Operatoren (und Kommas) machen Funktionsausdrücke und Funktionsdeklarationen eindeutig.
// Sobald der Parser weiß, dass einer von ihnen bereits ein Ausdruck ist, werden alle anderen standardmäßig verwendet zu Ausdrücken
true && function foo(x) {
warning(x);
}(1);

Füllen Sie die Grube: Diese Grube Der Schlüssel liegt darin, die Essenz von zu verstehen verschiedene Funktionsausdrücke.

6. Schließungen in Schleifen

Das Folgende zeigt eine häufige Gefahr:

Code kopieren Der Code lautet wie folgt:




   
Dokument


   

beim Klicken auf die Links unten wird die Nummer seiner Sequenz angezeigt


    < ;ul>
       
  • link #0

  •        
  • link #1

  •        
  • link #2

  •        
  • Link #3

  •        
  • Link #4

  •    


    复制代码 代码如下:

    var links = document.getElementsByTagName("ul")[ 0].getElementsByTagName("a");

    for (var i = 0, l = links.length; i < l; i ) {
        links[i].onclick = function (e ) {
            e.preventDefault();
            warning("You click link #" i);
        }       
    }

    我们预期当点击第 i 个链接时,得到此序列索引 i 的值,可实际无论点击哪个链接,得到的都是 i 在循环后的最终结果: „5“。

    解释一下原因:当 Warnung 被调用时, für 循环内的匿名函数表达式,保持了对外部变量. i的引用(闭包),此时循环已结束,i 的值被修改为 „5“ 。

    填坑:为了得到想要的结果,需要在每次循环中创建变量 i >

    复制代码 代码如下:

       
        Document


       

    zeigen Sie beim Klicken auf die unten stehenden Links die Anzahl an seine Sequenz


       



    复制代码 代码如下:
    var links = document.getElementsByTagName(“ul”)[ 0].getElementsByTagName(“a”);
    for (var i = 0, l = links.length; i < l; i ) {
        links[i].onclick = (function (index) {
       &  🎜>

    Wie Sie sehen können, ist die Form von (function () { ... })() die Selbstausführung der oben genannten Funktion, die bei erneuter Ausführung an den Index übergeben wird wird einen Verweis auf den Index haben, dieser Wert wird zu diesem Zeitpunkt nicht zyklisch geändert. Nachdem Sie das Prinzip verstanden haben, können Sie natürlich auch so schreiben:

    Code kopieren Der Code lautet wie folgt:

    for (var i = 0, l = links.length ; i < l; Index „Sie klicken auf Link #“);
    }
    })(i);
    }



    Es funktioniert auch.
    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

    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ße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

    So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

    WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

    WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

    Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

    Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

    So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

    So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

    JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

    JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

    Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

    JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

    So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

    Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

    JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems Dec 17, 2023 am 08:41 AM

    JavaScript ist eine in der Webentwicklung weit verbreitete Programmiersprache, während WebSocket ein Netzwerkprotokoll für die Echtzeitkommunikation ist. Durch die Kombination der leistungsstarken Funktionen beider können wir ein effizientes Echtzeit-Bildverarbeitungssystem erstellen. In diesem Artikel wird erläutert, wie dieses System mithilfe von JavaScript und WebSocket implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Anforderungen und Ziele des Echtzeit-Bildverarbeitungssystems klären. Angenommen, wir haben ein Kameragerät, das Bilddaten in Echtzeit sammeln kann

    See all articles