Médio JavaScript
Função fábrica de multiplicadores
Enunciado
Crie uma função criarMultiplicador que recebe um número fator e retorna uma função que multiplica seu argumento por fator. Em seguida, use-a para criar dobro e triplo e teste com o valor 5.
Requisitos
criarMultiplicadorrecebe um parâmetrofator.- Retorna uma função que recebe um número e retorna o produto
fator * numero. - Crie
dobroetriploe imprimadobro(5)etriplo(5).
Código inicial
function criarMultiplicador(fator) {
// seu código aqui
}
const dobro = criarMultiplicador(2);
const triplo = criarMultiplicador(3);
console.log(dobro(5)); // 10
console.log(triplo(5)); // 15
Saída esperada
10
15
Ver dica
A função retornada deve usar o parâmetro fator da função externa.
Mostrar solução
function criarMultiplicador(fator) {
return function(numero) {
return fator * numero; // closure captura 'fator'
};
}
const dobro = criarMultiplicador(2);
const triplo = criarMultiplicador(3);
console.log(dobro(5)); // 10
console.log(triplo(5)); // 15
Passo a passo
criarMultiplicadorrecebefatorcomo parâmetro.- Retorna uma função anônima que aceita
numero. - Dentro dessa função, multiplica
fatorpornumero.fatoré acessado via closure. dobroé criado comfator = 2;triplocomfator = 3.- Cada função retornada mantém seu próprio
fatorno ambiente léxico.
Por que funciona
A função interna referencia fator, que está no escopo da função externa. Mesmo após criarMultiplicador retornar, a closure mantém fator vivo. Como cada chamada cria um novo escopo, dobro e triplo têm fatores independentes.
Erros comuns
- Não retornar a função interna: se esquecer
return,dobroseráundefinededobro(5)dará erro. - Usar
fatorcomo variável global: sefatorfor global, todas as funções usarão o mesmo valor. - Confundir parâmetros: a função retornada deve receber
numero, nãofator.
Outra forma de resolver
Usar arrow function:
const criarMultiplicador = fator => numero => fator * numero;
Mais conciso, mas menos explícito para iniciantes.
Saída esperada
10
15