Heim  >  Artikel  >  Web-Frontend  >  Ist eine innere Funktion in JavaScript immer ein Abschluss?

Ist eine innere Funktion in JavaScript immer ein Abschluss?

DDD
DDDOriginal
2024-10-31 08:03:01561Durchsuche

Is an inner function always a closure in JavaScript?

JavaScript-Abschlüsse vs. anonyme Funktionen

In JavaScript tritt ein Abschluss auf, wenn eine innere Funktion Zugriff auf die Variablen des äußeren Bereichs hat, auch danach Die äußere Funktion hat die Ausführung abgeschlossen. Viele Funktionen in JavaScript gelten als Abschlüsse, aber theoretisch ist nur eine bestimmte Teilmenge von besonderem Interesse.

Fall 1: Friend's Code

<code class="js">(function f() {
  var i2 = i;
  setTimeout(function g() {
    console.log(i2);
  }, 1000);
})();</code>
  • Funktion f ist kein Abschluss, da keine seiner freien Variablen abgeschlossen ist. Allerdings
  • Funktion g ist ein Abschluss für die freie Variable i2. Die Variable i2 wird erfasst, wenn g erstellt wird.

Fall 2: Ihr Code

<code class="js">setTimeout((function f(i2) {
  return function g() {
    console.log(i2);
  };
})(i), 1000);</code>
  • Funktion f ist kein Abschluss, weil es hat keine freien Variablen.
  • Funktion g ist ein Abschluss für die freie Variable i2. Die Variable i2 wird erfasst, wenn g erstellt wird.

Schlussfolgerung

Daher ist die innere Funktion g in beiden bereitgestellten Lösungen ein Abschluss, aber nicht die äußeren. Dies zeigt, dass sie zwar das gleiche Ergebnis erzielen, dies jedoch über unterschiedliche Mechanismen.

Das obige ist der detaillierte Inhalt vonIst eine innere Funktion in JavaScript immer ein Abschluss?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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