Hallo,
function basis()
{
var testen = new array();function test( testen )
{
testen.push( 1,2,3,4,5,... );
}object.onclick = function() { test( testen ); };
neuer_test = weiterer_test( testen );
//--> hier hat das array testen immer den inhalt 0
};
Bitte werde dir bewusst, warum das nicht funktioniert und was das Registrieren von Event-Handlern bedeutet.
Es bedeutet NICHT, dass das Programm ANHÄLT und auf das Ereignis WARTET.
Es bestimmt vielmehr eine Funktion, die in ihrem eigenen, losgelösten Kontext ausgeführt wird, WENN irgendwann später das Ereignis passiert.
> ~~~javascript
function basis()
> {
> var testen = new array();
>
> function test( testen )
> {
> testen.push( 1,2,3,4,5,... );
>
> neuer_test = weiterer_test( testen );
> }
>
> object.onclick = function() { test( testen ); };
> };
Von der Idee her ist das schon richtiger.
dann sieht das array testen so aus: 1,2,3,4,5,...
ich wollte wie gesagt unnötige verschachtelungen vermeiden.aber wenn es über dieses eventhandler onclick nicht geht,muss ich diese funktion-verschachtelung machen.
Ja und nein: Das ist ein grundlegendes Problem der asynchronen Arbeitsweise und es gibt verschiedene Lösungsansätze.
Wenn du z.B. drei Vorgänge hast, die streng nacheinander erfolgen müssen, weil jeder Vorgang das Ergebnis des vorherigen benötigt, aber alle Vorgänge asynchron durch Events gestartet werden: Dann brauchst du zumindest *von der Struktur her* eine Verschachtelung. Und du musst ggf. mit Statusvariablen den Fortschritt verfolgen.
Man *kann* in die Versuchung kommen, das alles in verschachtelten Funktionen zu notieren. Sinnvollerweise tut man das nicht, sondern splittet die Vorgänge in kleine Funktionen auf, die man untereinander notiert und die sich gegenseitig aufrufen bzw. als Event-Handler und Callbacks dienen.
Wie man das im konkreten Fall sinnvoll umsetzt, kann man nicht vorhersagen. Allgemein sollte man Verschachtelung vermeiden und kann den Code »links halten« (wenig Einrückungen = wenig Verschachtelungen).
Mathias