Frage:
In einer Diskussion über Abschlüsse in JavaScript behauptete ein Freund das Ihrer Umsetzung mangelte es an Abschlüssen, während die anderen das Gegenteil argumentierten. Können Sie bestimmen, welche Lösung Abschlüsse verwendet, indem Sie das Konzept der Abschlüsse anwenden?
Lösung:
Abschlussdefinition: Ein Abschluss in JavaScript bezieht sich auf a Teilmenge von Funktionen mit freien Variablen (Variablen, die in einem übergeordneten Bereich definiert sind), auf die von einem anderen Bereich aus verwiesen wird. Wenn auf einen Abschluss außerhalb seines übergeordneten Bereichs verwiesen wird, wird er über dem Upvalue (der freien Variablen) aus diesem Bereich geschlossen.
Fall 1: Das Programm Ihres Freundes
<code class="js">for (var i = 0; i < 10; i++) { (function f() { var i2 = i; setTimeout(function g() { console.log(i2); }, 1000); })(); }</code>
Analyse:
Fall 2: Ihr Programm
<code class="js">for (var i = 0; i < 10; i++) { setTimeout((function f(i2) { return function g() { console.log(i2); }; })(i), 1000); }</code>
Analyse:
Schlussfolgerung:
Sowohl Sie als auch Ihr Freund verwenden in Ihren Implementierungen Abschlüsse. Der Unterschied besteht darin, dass im Programm Ihres Freundes der Abschluss innerhalb der inneren Funktion g erstellt wird, während in Ihrem Programm der Abschluss innerhalb der äußeren Funktion f erstellt wird.
Das obige ist der detaillierte Inhalt vonVerwendet der JavaScript-Code Ihres Freundes tatsächlich Schließungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!