JS-Tutorial

JS-HAUS JS-Einführung JS Wohin JS-Ausgabe JS-Anweisungen JS-Syntax JS-Kommentare JS-Variablen JS Let JS Konst JS-Operatoren JS-Arithmetik JS-Aufgabe JS-Datentypen JS-Funktionen JS-Objekte JS-Ereignisse JS-Strings JS-String-Methoden Suche nach JS-Strings JS-String-Vorlagen JS-Nummern JS-Zahlenmethoden JS-Arrays JS-Array-Methoden JS-Array-Sortierung JS-Array-Iteration JS-Array-Konstante JS-Daten JS-Datumsformate JS Date Get-Methoden JS-Datumssatzmethoden JS Math JS Zufällig JS Boolesche Werte JS-Vergleiche JS-Bedingungen JS-Schalter JS-Schleife für JS-Schleife für In JS-Schleife für Of JS-Schleife While JS Pause JS-Iterables JS-Sets JS-Karten JS Typeof JS-Typkonvertierung JS Bitweise JS RegExp JS-Fehler JS-Bereich JS Heben Strenger JS-Modus JS dieses Schlüsselwort JS-Pfeilfunktion JS-Klassen JS JSON JS-Debugging JS-Styleguide JS Best Practices JS-Fehler JS-Leistung JS Reservierte Wörter

JS-Versionen

JS-Versionen JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge JS-Geschichte

JS-Objekte

Objektdefinitionen Objekteigenschaften Objektmethoden Objektanzeige Objektzugriffsmethoden Objektkonstruktoren Objekt-Prototypen Objekt-Iterables Objektsätze Objektkarten Objektreferenz

JS-Funktionen

Funktionsdefinitionen Funktionsparameter Funktionsaufruf Funktionsaufruf Funktion anwenden Funktionsschließungen

JS-Klassen

Klasse Einführung Klassenvererbung Klasse statisch

JS asynchron

JS-Rückrufe JS asynchron JS verspricht JS Async/Warten

JS-HTML-DOM

DOM-Einführung DOM-Methoden DOM-Dokument DOM-Elemente DOM-HTML DOM-Formulare DOM-CSS DOM-Animationen DOM-Ereignisse DOM-Ereignis-Listener DOM-Navigation DOM-Knoten DOM-Sammlungen DOM-Knotenlisten

Stückliste des JS-Browsers

JS-Fenster JS-Bildschirm JS-Standort JS-Geschichte JS-Navigator JS-Popup-Warnung JS-Timing JS-Cookies

JS-Web-APIs

Web-API-Einführung Web Forms-API Webprotokoll-API Webspeicher-API Web Worker-API Web-Fetch-API Web-Geolocation-API

JS AJAX

AJAX-Einführung AJAX-XMLHttp AJAX-Anfrage AJAX-Antwort AJAX-XML-Datei AJAX-PHP AJAX ASP AJAX-Datenbank AJAX-Anwendungen AJAX-Beispiele

JS JSON

JSON-Einführung JSON-Syntax JSON vs. XML JSON-Datentypen JSON-Parsing JSON-Stringify JSON-Objekte JSON-Arrays JSON-Server JSON-PHP JSON-HTML JSON JSONP

JS vs. jQuery

jQuery-Selektoren jQuery-HTML jQuery-CSS jQuery-DOM

JS-Grafik

JS-Grafik JS-Leinwand JS Plotly JS Chart.js JS Google-Diagramm JS D3.js

JS-Beispiele

JS-Beispiele JS-HTML-DOM JS-HTML-Eingabe JS-HTML-Objekte JS-HTML-Ereignisse JS-Browser JS-Editor JS-Übungen JS-Quiz JS-Zertifikat

JS-Referenzen

JavaScript-Objekte HTML-DOM-Objekte


JavaScript -Schließungen


JavaScript-Variablen können zum lokalen oder globalen Geltungsbereich gehören.

Globale Variablen können mit Closures lokal (privat) gemacht werden .


Globale Variablen

A kann wie folgt auf alle innerhalb der Funktion functiondefinierten Variablen zugreifen :

Beispiel

function myFunction() {
  let a = 4;
  return a * a;
}

Aber a functionkann auch auf Variablen zugreifen, die außerhalb der Funktion definiert sind, wie folgt:

Beispiel

let a = 4;
function myFunction() {
  return a * a;
}

Im letzten Beispiel ist a eine globale Variable.

Auf einer Webseite gehören globale Variablen zum Fensterobjekt.

Globale Variablen können von allen Skripten auf der Seite (und im Fenster) verwendet (und geändert) werden.

Im ersten Beispiel ist a eine lokale Variable.

Eine lokale Variable kann nur innerhalb der Funktion verwendet werden, in der sie definiert ist. Es ist vor anderen Funktionen und anderem Skriptcode verborgen.

Globale und lokale Variablen mit demselben Namen sind unterschiedliche Variablen. Das Ändern des einen ändert nicht das andere.

Variablen, die ohne Deklarationsschlüsselwort ( var, let, oder const) erstellt werden, sind immer global, auch wenn sie innerhalb einer Funktion erstellt werden.

Beispiel

function myFunction() {
  a = 4;
}


Variable Lebensdauer

Globale Variablen leben, bis die Seite verworfen wird, z. B. wenn Sie zu einer anderen Seite navigieren oder das Fenster schließen.

Lokale Variablen haben eine kurze Lebensdauer. Sie werden erstellt, wenn die Funktion aufgerufen wird, und gelöscht, wenn die Funktion beendet ist.


Ein Gegendilemma

Angenommen, Sie möchten eine Variable zum Zählen von etwas verwenden, und Sie möchten, dass dieser Zähler für alle Funktionen verfügbar ist.

Sie könnten eine globale Variable und a verwenden function, um den Zähler zu erhöhen:

Beispiel

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

// The counter should now be 3

Es gibt ein Problem mit der obigen Lösung: Jeder Code auf der Seite kann den Zähler ändern, ohne add() aufzurufen.

Der Zähler sollte für die add()Funktion lokal sein, um zu verhindern, dass anderer Code ihn ändert:

Beispiel

// Initiate counter
let counter = 0;

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 0

Es hat nicht funktioniert, weil wir den globalen Zähler anstelle des lokalen Zählers anzeigen.

Wir können den globalen Zähler entfernen und auf den lokalen Zähler zugreifen, indem wir ihn von der Funktion zurückgeben lassen:

Beispiel

// Function to increment counter
function add() {
  let counter = 0;
  counter += 1;
  return counter;
}

// Call add() 3 times
add();
add();
add();

//The counter should now be 3. But it is 1.

Es hat nicht funktioniert, weil wir den lokalen Zähler jedes Mal zurückgesetzt haben, wenn wir die Funktion aufrufen.

 Eine innere JavaScript-Funktion kann dies lösen.


Verschachtelte JavaScript-Funktionen

Alle Funktionen haben Zugriff auf den globalen Geltungsbereich.  

Tatsächlich haben in JavaScript alle Funktionen Zugriff auf den Geltungsbereich "über" ihnen.

JavaScript unterstützt verschachtelte Funktionen. Verschachtelte Funktionen haben Zugriff auf den Geltungsbereich "über" ihnen.

In diesem Beispiel hat die innere Funktion plus()Zugriff auf die counterVariable in der übergeordneten Funktion:

Beispiel

function add() {
  let counter = 0;
  function plus() {counter += 1;}
  plus();   
  return counter;
}

Dies hätte das Gegendilemma lösen können, wenn wir die plus() Funktion von außen erreichen könnten.

Wir müssen auch einen Weg finden, counter = 0nur einmal auszuführen.

Wir brauchen eine Schließung.


JavaScript-Schließungen

Erinnern Sie sich an selbstaufrufende Funktionen? Was macht diese Funktion?

Beispiel

const add = (function () {
  let counter = 0;
  return function () {counter += 1; return counter}
})();

add();
add();
add();

// the counter is now 3

Beispiel erklärt

Die Variable addwird dem Rückgabewert einer selbstaufrufenden Funktion zugewiesen.

Die selbstaufrufende Funktion wird nur einmal ausgeführt. Es setzt den Zähler auf Null (0) und gibt einen Funktionsausdruck zurück.

Auf diese Weise wird add zu einer Funktion. Das "Wunderbare" daran ist, dass es auf den Zähler im übergeordneten Bereich zugreifen kann.

Dies wird als JavaScript- Closure bezeichnet. Es ermöglicht einer Funktion, " private " Variablen zu haben.

Der Zähler ist durch den Geltungsbereich der anonymen Funktion geschützt und kann nur mit der add-Funktion geändert werden.

Eine Schließung ist eine Funktion, die Zugriff auf den übergeordneten Gültigkeitsbereich hat, selbst nachdem die übergeordnete Funktion geschlossen wurde.