Struppi: onmouseover -> mehrere Scripte aufrufen

Beitrag lesen

onmouseover='function1(), function2(), function3()'
Du erzeugst hier eine Liste aus den Rückgabewerten der Funktionen.

Wirklich? Soweit ich weiß, kennt Javascript den sequence operator. Demnach wäre das ein Ausdruck, der von links nach rechts nacheinander die einzelnen Operanden auswertet und den Wert des letzten Operanden (hier also den Rückgabewert von function3()) hat.

Ja, stimmt.
Allerdings läßt sich das nur bedingt ausnutzen.

Das geht nämlich nicht (zumindest im IE 4):

  
function f1(){   return 1;}  
function f2(){   return 2;}  
function f3(){   return 3;}  
  
var x = f1(),f2(),f3();  
  
alert(x);

Mit einer Klammer um (f1(),f2(),f3()) ergibt es aber, genau wie du sagst, drei (und keine Liste, wie ich behauptet habe)

Wobei das etwas widersprüchlich zu einem Funktionsaufruf ist:

  
alert( p(f1(),f2(),f3()) );  
  
// Aber:  
alert( p( (f1(),f2(),f3()) ));  
  
function p( )  
{  
   return (arguments[0]);  
}

Wo der Ausdruck dann selbstverständlich nicht ausgewertet wird.

Allgemein würde ich das Komma nicht als Operator benutzen, um Verwechselungen zu vermeiden. Da er sowohl als Listentrenner in Funktionsaufrufen und Indexoperatoren verwendet wird, als auch als sequence Operator.

Struppi.