Explicação de Meu assistente
Objetivo deste desafio: Usar uma função retorno de chamada para mudar a tarefa de myAssistant
.
Passo a passo da solução: myAssistant
é uma função que usa 2 entradas: uma string que será armazenada no parâmetro time
e outra função que será armazenada no parâmetro callbackFunction
.
Quando você usa uma função como entrada de outra função, ela é chamada de “função retorno de chamada” ou apenas de “retorno de chamada”. Isso é diferente das funções de aninhamento como você fez com print(pickRandom(10))
ou drawBox(pickrandom(color))
porque print()
e drawBox()
estão, na verdade, usando apenas a saída final da chamada pickRandom()
. O assistente está usando o nome da função para que possa executá-la dentro dele mesmo.
O código inicial tem o comando myAssistant('6pm', recordShow)
. recordShow
é o nome de uma função criada em algum código oculto adicional. '6pm'
será armazenado no parâmetro time
e recordShow
será armazenado no parâmetro callbackFunction
.
Quando myAssistant()
é executado, ele registra uma mensagem para que você saiba que foi iniciado. Em seguida usa seus parâmetros, time
e callbackFunction
, para executar o comando callbackFunction(time)
. Como sabemos o que está armazenado em cada um desses parâmetros, o comando é o mesmo que recordShow('6pm')
. Isso chamará a função recordShow()
com o argumento '6pm'
.
No final do código, você pode fazer com que o assistente “acione um alarme” ou “acenda as luzes” usando setAlarm
ou turnOnLights
como a função retorno de chamada. Basta lembrar que o 1º argumento de myAssistant()
deve ser a hora (uma string) e o 2º argumento é o nome de uma função (ou setAlarm
ou turnOnLights
)
Solução do código de exemplo:
(Toque abaixo para revelar)
function myAssistant (time, callbackFunction) {
console.log('I am your personal assistant, and I am happy to help with your request');
callbackFunction(time);
}
myAssistant('6pm', recordShow);
myAssistant('10am', setAlarm);
Conceitos de JavaScript: Funções retorno de chamada, Funções de chamada, Bloco de código (função), console.log()
Código Adicional (código oculto executado antes do código do desafio):
function setAlarm(time) {
console.log('Your alarm has been set for ' + time);
}
function turnOnLights(time) {
console.log('Your lights will be turned on at ' + time);
}
function recordShow(time) {
console.log('Your show will be recorded at ' + time);
}