O Javascript é uma linguagem script dinâmica, fracamente tipada, baseada em protótipos e que possui funções de primeira classe.
Linguagem dinâmica: Linguagem de alto nível que executa em tempo de execução várias tarefas que outras linguagens executariam durante a compilação.
Fracamente tipada: Suporta conversão de tipos implícita, e não se declara o tipo na inicialização da variável.
Baseada em protótipos: Estilo de orientação a objetos onde classes não existem, dessa forma o reuso (herança para linguagens baseadas em classe) é feito clonando objetos existentes que servem assim de protótipos.
Funções de primeira classe: Habilidade da linguagem de passar functions como argumentos para outras functions, retornar functions como valor em outras funções, atribuir functions a variáveis e armazenar functions em estruturas de dados.
Uma função em Javascript é composta pelas seguintes partes:
Palavra reservada function.
Nome da função (opcional). Quando o nome não é declarado, a função é chamada de anônima.
Parâmetros separados por vírgula. Serão atribuídos a eles variáveis de mesmo nome dentro da função. Ao invés de serem inicializados com undefined, são inicializados diretamente pelo arguments.
Comportamento.
Funções em Javascript é um assunto bastante extenso e crítico para o entendimento real da linguagem. Posso falar com propriedade que a simples compreensão dos conceitos envolvidos já evitou que eu presenciasse muitos tiros no próprio pé.
O Javascript é descrito na Wikipedia como uma linguagem script dinâmica, fracamente tipada, baseada em protótipos e que possui funções de primeira classe. What? Realmente o significado disso pode não ficar tão claro de tempos em tempos, então vamos relembrar algumas coisas.
Linguagem dinâmica: Linguagem de alto nível que executa em tempo de execução várias tarefas que outras linguagens executariam durante a compilação.
Fracamente tipada: Suporta conversão de tipos implícita, e não se declara o tipo na inicialização da variável.
Baseada em protótipos: Estilo de orientação a objetos onde classes não existem, dessa forma o reuso (herança para linguagens baseadas em classe) é feito clonando objetos existentes que servem assim de protótipos.
Funções de primeira classe: Habilidade da linguagem de passar functions como argumentos para outras functions, retornar functions como valor em outras funções, atribuir functions a variáveis e armazenar functions em estruturas de dados. Os conceitos acima são indispensáveis pra compreender de verdade o que realmente são as funções no Javascript. Funções no Javascript são tão importantes que alguns preferem dizer que o Javascript
Os conceitos acima são indispensáveis pra compreender de verdade o que realmente são as funções no Javascript. Funções no Javascript são tão importantes que alguns preferem dizer que o Javascript como Functional Oriented Language. A razão disso é que funções no Javascript fazem mais que separar lógica dentro de unidades de execução. Elas são funções de primeira classe e possibilitam também a injeção de escopo e a habilidade de criar objetos.
Ter funções com tantas possibilidades e responsabilidades pode ser considerado uma bênção ou uma maldição. Bênção porque isso torna a linguagem versátil e rápida, e maldição porque isso faz com que você facilmente dê tiros no seu próprio pé se você não souber o que está fazendo.