Hier sind einführende Hinweise [mehr]

Closure

Nächste Frage Vorherige Frage Zeige Lösung an Gesamtpunktzahl

Es geht um allgemeine Aussagen zu Closures. Richtige Aussagen bitte ankreuzen.
Wenn eine "Kind-Funktion", die durch die "Mutter-Funktion" erstellt wird, auch nach der Erstellung noch Zugriff auf den Erstellungskontext der "Mutter-Funktion" hat, so wird dies Closure (seltener auch "Funktionsabschluss") genannt.
Bei ECMAScript hat die innere Funktion Zugriff auf Parameter und Variablen derjenigen Funktionen, in denen diese definiert ist (mit Ausnahmen von this und arguments).
Die zurück gegebene "Kind-Funktion" tut nichts, bis diese (z.B. durch einen Event) aufgerufen wird.
Das Closures-Konzept gibt es (mehr oder minder ähnlich) bei den funktionalen Programmiersprachen, wie LISP, Scheme, Haskell, Ocaml.
Das Closures-Konzept gibt es (mehr oder minder ähnlich) bei den (nicht-rein funktionalen) Programmiersprachen, wie Ada, Delphi, ECMAScript, Smalltalk, Python, Lua, Ruby, C#, C++11, Groovy, Scala, Go, PHP und Perl.
Es geht um die Funktion mutter, die eine "Kind-Funktion" zurück gibt. Richtige Aussagen bitte ankreuzen.
<script>
var mutter = function () { 
    var wert = 4711;
    return function () { return wert; };
}

var k0 = mutter(),
    k1 = k0,
    k2 = k0(),
    k3 = mutter()();
</script>
k0 entspricht der Funktion function () { return wert; }
k1 entspricht der Funktion function () { return wert; }
k2 entspricht der Zahl 4711
k3 entspricht der Zahl 4711
Betrachtet wird die Sichtbarkeit der Funktionen f(), g() in dem folgenden Code-Schnipsel. Richtige Aussagen bitte ankreuzen.
<script>
var f, g;

function fn() { var x = 0;
  f = function() { x = x + 1; return x; };
  g = function() { x = x - 1; return x; };
  x = 1;
  alert( f() ); /* 1 */
}

fn();

alert( g() ); /* 2 */
alert( f() ); /* 3 */
</script>

Die Anzeige bei /* 1 */ liefert die Zahl 2
Die Anzeige bei /* 2 */ liefert die Zahl 1
Die Anzeige bei /* 3 */ liefert die Zahl 2
Bei den folgenden Funktionen die initiierenden Parmeter-Übergaben betrachtet. Richtige Aussagen bitte ankreuzen.
<script>
var wert = 12, a, b, c;

a = ( function () { return wert + 1; }() ); 

b = ( function (val) { return ++val; }(a) ); 

c = (function (v) { return { v:v }; }(b+a) );
</script>
alert( a ) liefert die Zahl 13
alert( b ) liefert die Zahl 14
alert( c.v ) liefert die Zahl 27
Die Sichtbarkeit und die Zugriffe der inneren anonymen Funktion auf Variablen der äußeren Funktion add, die die anonyme Funktion zurück gibt, sollen nachfolgend betrachtet werden.
<script>
 function add(a) {
   return function (b) { return a + b; };
 }

 var add22 = add(22); /* 1 */

 var x = add22(-7) + add22(-4); 

 alert(x); /* 2 */ 
</script>
Die Anzeige bei /* 2 */ liefert 11
Die Anzeige bei /* 2 */ liefert 33
Die Variable add22 bei /* 1 */ entspricht der Funktion
 var add22 = function( b ) { return 22 + b; };