Hi Struppi,
ich hab mir nochmal Gedanken über die Unterschiede beider Sprachen gemacht und ich denke die unterschiedlichen Geltungsbereiche von Routine lassen sich durch Perl Namenräume erklären.
Perl merkt sich jede neue Routine in der Symboltabelle des aktuellen Packages, JS hingegen behandelt sie wie lexikale Variablen.
Wenn man also in einer Routine eine andere anlegt ist sie in JS nur im Scope der Mutterroutine sichtbar in Perl jedoch global.
Ciao
Kurt
Hand auf herz, wann hast du das letzte mal eine Funktion dynamisch redefiniert? Und in welcher Sprache?
In Javascript ist dies öfters nötig, allerdings ist dort das Verhalten anders
function get(val, el) {
return function() { alert(val + ':' + el) };
}
function get2(val, el) {
function f() { alert(val + ':' + el) };
return f;
}window.onload = function() {
var all = document.getElementsByTagName('*');
for(var i = 0; i < all.length; i++) {
var el = all[i];
el.onclick = get(i, el);
// el.onclick = get2(i, el);
}}
>
> Funktionert beides, in Perl nur das Erste, aber beim zweiten kommt dafür eine Warnung
>
> Struppi.