Ich bereite für ein Vorstellungsgespräch als Entwickler JS und ich in diese Schließung Definition gestoßen:Ist eine Funktion im globalen Gültigkeitsbereich eine Sperrung?
Verschluss ist eine Funktion innerhalb eine andere Funktion definiert (das übergeordnete Funktion genannt), und Zugang hat zu Variablen, die im übergeordneten Funktionsumfang deklariert und definiert sind.
Lassen Sie uns zwei verschiedene Teile des Codes betrachten:
function a() {
const temp = 1;
function b() {
console.log(temp);
}
}
So offensichtlich funktionieren b
ein Verschluss ist, weil es in Funktion a
und Zugriff auf seine variable temp
hat erklärt wurde.
Aber was, wenn ich erkläre nur eine Funktion einfach so, ohne IIFE:
function c() {
alert("Hi") // a function taken from the global scope
}
Meine c
Funktion nicht in jeder Funktion deklariert wurde, aber es hat Zugriff auf den globalen Bereich. Kann es eine Schließung genannt werden, oder sollte es speziell innerhalb einer anderen Funktion erklärt werden, um eine solche zu nennen?
Vielleicht sind einige Freak Fälle gibt es nennen ich nicht dachte, sondern afaik, technisch ist jede Funktion, die du deklarierst, eine Schließung. Sie nennen sie normalerweise nur so, dass Sie, wenn Sie betonen möchten, auf Variablen zugreifen, die im übergeordneten Bereich deklariert sind. – ASDFGerte
Ein Abschluss hat drei Bereichsketten, es sind eigene definierte Variablen, die der umschließenden Funktion und die globalen Variablen. Ihr zweites Beispiel hat nur lokale und globale Umfangsketten, also nein, es ist kein Abschluss. – James
Ich bin nicht gut genug in der Spezifikation, um sicher zu sein, über meine Antwort. Von dem, was ich gelesen habe [ECMAScript-Funktionsobjekte kapseln den parametrisierten ECMAScript-Code ** geschlossen über ** eine lexikalische Umgebung und unterstützen die dynamische Auswertung dieses Codes.] (Https://www.ecma-international.org/ecma-262/ 8.0/index.html # sec-ecmascript-function-objects) [Eine globale Umgebung ist eine Lexikalische Umgebung, die keine äußere Umgebung hat.] (Https://www.ecma-international.org/ecma-262/8.0/ index.html # sec-lexical-environments) [MDN-Definition] (https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) – ASDFGerte