Função que retorna uma função em JavaScript

Suponha que temos uma função como esta, que retorna uma string:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // exibirá '!'

Agora, em vez de uma string, por analogia, vamos retornar uma função anônima:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func(); // a variável result será uma função
console.log(result); // exibirá 'function() {return '!';}'

Como você pode ver, a variável result agora é uma função. Vamos exibir no console o resultado de sua execução. Para isso, escrevemos parênteses para ela:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func();
console.log( result() ); // exibirá '!'

Como a chamada func() retorna uma função, podemos chamar imediatamente essa função retornada, assim: func()() - os primeiros parênteses obtêm o resultado da função func (que é uma função), e os segundos parênteses são aplicados ao resultado de func.

Vamos tentar:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

console.log( func()() ); // exibirá '!'
Задание 1

Crie uma função func1 que, quando chamada assim: func1()(), retorne o número 1. Crie uma função similar func2, retornando o número 2. Encontre a soma dos resultados dessas funções.