Definições de funções JavaScript


Índice

    Mostrar índice


As funções JavaScript são definidas com o Palavra-chave função.

Você pode usar uma declaração de função ou um função expressão.


Declarações de Função

Anteriormente neste tutorial, você aprendeu que as funções são declaradas com o seguinte sintaxe:

function functionName(parameters) {
  // code to be executed
}

As funções declaradas não são executadas imediatamente. Eles são "salvos para uso posterior", e serão executados posteriormente, quando forem invocados (chamados).

Exemplo

function myFunction(a, b) {
   return a * b;
}

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>

<p>Call a function which performs a calculation and returns the result:</p>

<p id="demo"></p>

<script>
let x = myFunction(4, 3);
document.getElementById("demo").innerHTML = x;

function myFunction(a, b) {
  return a * b;
}
</script>

</body>
</html>

Ponto e vírgula são usados para separar instruções JavaScript executáveis.
Como uma declaração de função não é uma instrução executável, ela é não é comum terminar com ponto e vírgula.


Expressões de Função

Uma função JavaScript também pode ser definida usando uma expressão.

Uma expressão de função pode ser armazenada em uma variável:

Exemplo

const x = function (a, b) {return a * b};

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>A function can be stored in a variable:</p>
<p id="demo"></p>

<script>
const x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>


Depois que uma expressão de função foi armazenada em uma variável, a variável pode ser usado como uma função:

Exemplo

const x = function (a, b) {return a * b};
let z = x(4, 3);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>After a function has been stored in a variable,
the variable can be used as a function:</p>

<p id="demo"></p>

<script>
const x = function (a, b) {return a * b};
document.getElementById("demo").innerHTML = x(4, 3);
</script>

</body>
</html>


A função acima é na verdade uma função anônima (uma função sem um nome).

Funções armazenadas em variáveis não precisam de nomes de função. Eles estão sempre invocado (chamado) usando o nome da variável.

A função acima termina com ponto e vírgula porque faz parte de uma instrução executável.



O Construtor Function()

Como você viu nos exemplos anteriores, as funções JavaScript são definidas com a palavra-chave function.

As funções também podem ser definidas com um construtor de função JavaScript integrado chamado Função().

Exemplo

const myFunction = new Function("a", "b", "return a * b");

let x = myFunction(4, 3);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>JavaScript has an built-in function constructor.</p>
<p id="demo"></p>

<script>
const myFunction = new Function("a", "b", "return a * b");
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

Na verdade, você não precisa usar o construtor da função. O exemplo acima é o mesmo que escrever:

Exemplo

const myFunction = function (a, b) {return a * b};

let x = myFunction(4, 3);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p id="demo"></p>

<script>
const myFunction = function (a, b) {return a * b}
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

Na maioria das vezes, você pode evitar o uso da palavra-chave new em JavaScript.


Função de içamento

Anteriormente neste tutorial, você aprendeu sobre "hoisting" (JavaScript Hoisting).

Hoisting é o comportamento padrão do JavaScript de mover declarações para o topo do escopo atual.

O içamento aplica-se a declarações de variáveis e a declarações de funções.

Por causa disso, funções JavaScript podem ser chamadas antes de serem declaradas:

myFunction(5);

function myFunction(y) {
  return y * y;
}

As funções definidas usando uma expressão não são elevadas.


Funções de auto-invocação

Expressões de função podem ser "auto-invocadas".

Uma expressão auto-invocável é invocada (iniciada) automaticamente, sem ser chamada.

As expressões de função serão executadas automaticamente se a expressão for seguida por().

Você não pode invocar automaticamente uma declaração de função.

Você tem que adicionar parênteses ao redor da função para indicar que é uma expressão de função:

Exemplo

(function () {
  let x = "Hello!!";  // I will invoke myself
})();

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<p>Functions can be invoked automatically without being called:</p>

<p id="demo"></p>

<script>
(function () {
  document.getElementById("demo").innerHTML = "Hello! I called myself";
})();
</script>

</body>
</html>


A função acima é na verdade uma função anônima de auto-invocação (função sem nome).


Funções podem ser usadas como valores

Funções JavaScript podem ser usadas como valores:

Exemplo

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3);

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Functions can be treated as values:</p>
<p>x = myFunction(4,3) or x = 12</p>
<p>In both cases, x becomes a number with the value of 12.</p>
<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
let x = myFunction(4, 3);
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Funções JavaScript podem ser usadas em expressões:

Exemplo

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3) * 2;

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Functions can be used in expressions.</p>
<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
let x = myFunction(4, 3) * 2;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Funções são objetos

O operador typeof em JavaScript retorna "função" para funções.

Porém, as funções JavaScript podem ser melhor descritas como objetos.

As funções JavaScript têm propriedades e métodos.

A propriedade arguments.length retorna o número de argumentos recebidos quando a função foi invocada:

Exemplo

function myFunction(a, b) {
  return arguments.length;
}

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<p>The arguments.length property returns the number of arguments received by the function:</p>

<p id="demo"></p>

<script>
function myFunction(a, b) {
  return arguments.length;
}
document.getElementById("demo").innerHTML = myFunction(4, 3);
</script>

</body>
</html>

O método toString() retorna a função como uma string:

Exemplo

function myFunction(a, b) {
  return a * b;
}
let text = myFunction.toString();

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>The toString() Method</h2>

<p>The toString() method returns the function as a string:</p>

<p id="demo"></p>

<script>
function myFunction(a, b) {
  return a * b;
}
document.getElementById("demo").innerHTML = myFunction.toString();
</script>

</body>
</html>

Uma função definida como propriedade de um objeto é chamada de método para o objeto.
Uma função projetada para criar novos objetos é chamada de construtor de objetos.


Funções de seta

As funções de seta permitem uma sintaxe curta para escrever expressões de função.

Você não precisa da palavra-chave function, da palavra-chave return e da palavra-chave colchetes.

Exemplo

// ES5
var x = function(x, y) {
    
   return x * y;
}

// ES6
const x = (x, y) => x * y;
 

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrow Functions</h2>

<p>With arrow functions, you don't have to type the function keyword, the return keyword, and the curly brackets.</p>

<p>Arrow functions are not supported in IE11 or earlier.</p>

<p id="demo"></p>

<script>
const x = (x, y) =&gt; x * y;
document.getElementById("demo").innerHTML = x(5, 5);
</script>

</body>
</html>

As funções de seta não possuem seu próprio isto. Eles não são adequados para definir métodos de objetos.

As funções de seta não são içadas. Eles devem ser definidos antes de serem usados.

Usando const é mais seguro do que usar var, porque uma expressão de função é valor sempre constante.

Você só pode omitir a palavra-chave return e as chaves se a função for uma única instrução. Por isso, pode ser um bom hábito mantê-los sempre:

Exemplo

const x = (x, y) => { return x * y };
 

Experimente você mesmo →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Arrow Functions</h2>

<p>Arrow functions are not supported in IE11 or earlier.</p>

<p id="demo"></p>

<script>
const x = (x, y) =&gt; { return x * y };
document.getElementById("demo").innerHTML = x(5, 5);
</script>

</body>
</html>

As funções de seta não são suportadas no IE11 ou anterior.