Viele Bücher über JS wie „The Definitive Guide to JavaScript“ oder „Elevation“ erklären Schließungen auf so unklare Weise, dass Neulinge sie nicht verstehen können! Aber keine Angst, heute erkläre ich dir ganz einfach, was ein Verschluss ist. Dies ist eine Erklärung für Abschlüsse für Anfänger. Es gibt keine obskuren und stumpfen Aussagen und Sie können sie auf einen Blick verstehen. Wenn etwas nicht stimmt, korrigieren Sie mich bitte!
Um Abschlüsse zu verstehen, müssen Sie zunächst den Umfang von Variablen verstehen.
In JS gibt es zwei Variablenbereiche: globale Variablen und lokale Variablen. Wie der Name schon sagt, sind globale Variablen Variablen, auf die an jedem Ort verwiesen werden kann, und lokale Variablen sind Variablen, auf die nur an bestimmten Orten verwiesen werden kann Code unten.
var globalScope="global scope"; function f(){ var localScope="local scope"; console.log(globalScope);//global scope } console.log(localScope);//undefined
In der Funktion f() können Sie auf den außerhalb des Funktionskörpers definierten globalScope zugreifen, aber nicht auf den außerhalb des Funktionskörpers definierten localScope. Dies ist der Unterschied zwischen globalen Variablen und lokalen Variablen.
Ist es möglich, dass localScope niemals außerhalb des Funktionskörpers zugänglich ist? Nein, dafür ist ein Abschluss geboren.
function f(){ var localScope="local scope"; return function(){ console.log(localScope); } } f()();//local scope
Wir haben auf die lokale Variable localScope außerhalb der Funktion f() zugegriffen. Die hier innerhalb der Funktion f() definierte anonyme Funktion ist ein Abschluss!