Si buscan en wikipedia o en blogs sobre lenguajes de programaci贸n se considera que JavaScript pertenece a la categor铆a de lenguajes interpretados, sin embargo esto es mentira (chan chan chan!! 馃槷) Javascript es de hecho un lenguaje compilado.

La cosa es que Javascript a diferencia de los lenguajes tradicionalmente compilados, no se compila de manera anticipada y tampoco los resultados de su compilaci贸n son portables entre varios sistemas distribuidos (como en el caso de Java, C/C++).

En JavaScript la compilaci贸n sucede justo antes de ejecutar el c贸digo.

驴Y que es lo que hace que un lenguaje sea compilado?

Para que un lenguaje sea considerado compilado debe pasar por un proceso que se conoce como el proceso de compilaci贸n.

Ok ok, esa explicaci贸n es parecida a la de el duelo a muerte con cuchillos 馃槄
DueloCuchillos

Regresando al tema, y explicando de manera muy general, el proceso de compilaci贸n consiste en los siguientes 3 pasos:

  1. Tokenizing / Lexing: en este paso, se rompe una cadena de caracteres en pedazos (tokens), por ejemplo:
     var a = 2;
    
    Se divide en los tokens: var, a, =, 2, y ;.
  2. Parsing: Toma un stream de tokens (algo as铆 como un array) y lo convierte en un 谩rbol de elementos anidados, que colectivamente representan la estructura gramatical del programa. Este 谩rbol se denomina AST (Abstract Syntax Tree) o en espa帽ol 谩rbol de sintaxis abstracto. Siguiendo el ejemplo:
    Despues de que var a = 2; sea convertido en tokens, el 谩rbol para esa instrucci贸n comienza con un nodo de nivel superior llamado VariableDeclaration, con un nodo secundario llamado Identifier (cuyo valor es a), y otro llamado AssignmentExpression que tiene un nodo hijo llamado NumericLiteral (cuyo valor es 2).
  3. Code-Generation: es el proceso de tomar un AST y convertirlo en c贸digo ejecutable. Esta parte var铆a mucho dependiendo del lenguaje, la plataforma a la que se est谩 dirigiendo, etc. Regresando al ejemplo:
    Despues de que var a = 2; sea convertido en tokens y despues en un AST, en este paso se convierte en un conjunto de instrucciones de m谩quina para crear una variable llamada a (incluida la reserva de memoria) y luego almacenar un valor (2) en a.

En conclusi贸n, Javascript es un lenguaje compilado y por lo tanto, cualquier fragmento de c贸digo tiene que ser compilado inmediatamente antes de que se ejecute. La raz贸n de porque se cre茅 que Javascript es interpretado es porque el navegador es un interprete que traduce c贸digo HTML y CSS (tambien php el cual es un lenguaje interpretado), sin embargo como recordaran los navegadores tambien tienen embebidos un Engine para trabajar con Javascript, un ejemplo claro es el caso del V8 Engine en Chrome, el cual se comunica con el compilador y el scope (de este ultimo les contar茅 mas adelante).