Moin!
JavaScript wird interpretiert, da beisst die Maus keinen Faden ab. Nur ist es so, dass vor der Ausfuehrung der Source-Code *geparst* wird, d.h. der Klartext wird gelesen und analysiert und in interpreter-interne Datenstrukturen uebersetzt, welche dann fuer den Interpreter viel einfacher (und daher schneller) lesbar sind. Das wird dann halt auch mal etwas nachlaessig als compilieren bezeichnet, obwohl es das streng genommen nicht ist.
Verwendet man eval(), dann werden waehrend der Laufzeit des Programms weitere Code-Teile geparst, was recht zeitaufwendig ist. Deshalb soll man eval() vor allem in Schleifen meiden: Da bei jedem Schleifendurchlauf erneut geparst wird, koennen hier erhebliche Geschwindigkeitseinbussen auftreten. (Eine Schleife innerhalb eines eval() ist dagegen nicht so problematisch.)
Und dann gilt noch, dass es natuerlich moeglich waere, JS zu compilieren, also ein richtiges ausfuehrbares Programm draus zu machen. Ob das sinnvoll waere, steht auf einem anderen Blatt.
In JScript gibt es die Moeglichkeit Compiler-Direktiven zu setzten, mit denen man den COMPILER beeinflussen kann. Z.B.:
Nur weil es Compiler-Direktive heisst, muss es ja keine sein. Dann Beispiel zeigt das auch deutlich:
/*@cc_on @*/
/*@if (@_win16) @*/
alert('Sie benutzen kein Windows 95, NT oder höher!');
/*@end @*/
/*@if (@_win32)
alert('Sie benutzen Windows 95, NT oder höher!');
@end
@*/
Waeren das wirklich Compiler-Direktiven, die also ausgewertet werden, wenn Du das Programm auf Deiner Entwicklungsmaschine in ein ausfuehrbares Programm uebersetzt, dann koenntest Du keine Aussage darueber machen, auf welcher Maschine das letztlich laeuft, sondern nur ueber die, auf der das uebersetzt wird. Code wie oben ist nur dadurch moeglich, dass das ganze Zeug eben erst bei der Ausfuehrung auf der Zielmaschine interpretiert wird.
Wenn allerdings compiliert werden wuerde, dann waeren Dinge wie
x = 'myv';
y = 'ar';
z = ' = 1234;';
eval(x+y+z);
eval('alert('+x+y+');');
nur sehr schwer (oder garnicht) moeglich. Usw.
Stimmt, wollte man einen richtigen JS-Compiler bauen, muesste man diesen Compiler selbst mit in das zu erzeugende ausfuehrbare Programm einbauen, damit Dinge wie eval() moeglich werden.
So long