5
respostas

Envio da função reiniciaJogo para o botão sem parâmetros

Na aula, foi criado a função reiniciaJogo e foi atrelado ao evento de click do botão #botao-reiniciar: $("#bota-reiniciar").click(reiniciaJogo). Eu não entendi porque foi passado a função reiniciaJogo ao evento de click sem parâmetro algum. No caso, não deveria ser reconhecido como uma variável ao invés de função?

5 respostas

Fala ai Tiago, tudo bem? Vamos lá:

Eu não entendi porque foi passado a função reiniciaJogo ao evento de click sem parâmetro algum.

O primeiro parâmetro da função click do jQuery espera receber uma função JavaScript, ou seja, espera que o tipo do parâmetro seja Function.

Por isso foi passada a função direto para ele.

No caso, não deveria ser reconhecido como uma variável ao invés de função?

Sim e não, existe quatro tipos de funções em JavaScript, sendo duas delas:

  • Funções de expressão: As funções de expressões podem ser armazenadas em variáveis, por exemplo:
var ola = function() {
    console.log('Ola')
}
  • Funções de declaração: As funções de declaração não são armazenadas em variaveis:
function ola() {
    console.log('Olá')
}

Mas a maneira de utilizá-las será a mesma.

ola() // expressão
ola() // declaração

Espero ter ajudado.

Cara, JavaScript é maior dodeira. Que linguagem diferente.

Bom, uma função declarada é do tipo function, mas uma função de expressão é armazenada numa variável que não é do tipo function, sendo var ou let. Então, se eu passar a função para algum parâmetro ela tem que ser passada com parâmetros vazios (funcaoQualquer())? Porque. como dito acima, espera-se receber um parâmetro do tipo function e neste caso não é por ser uma variável.

JavaScript é top kkk

Bom, uma função declarada é do tipo function, mas uma função de expressão é armazenada numa variável que não é do tipo function, sendo var ou let

Na verdade as suas são do tipo Function.

Então, se eu passar a função para algum parâmetro ela tem que ser passada com parâmetros vazios (funcaoQualquer())?

Se algum parâmetro seu espera receber uma função, você tem que passá-la apenas através do nome, se você passar com () vai estar executando ela em vez de passar para o parâmetro.

Espero ter ajudado.

Cara, eu tava acostumado com C e Java que não possuem tipagem dinâmica igual ao JavaScript, além da OO no JavaScript ser uma doidera. Enfim, vamos lá.

Na verdade as suas são do tipo Function.

Como assim? Não entendi ao certo. Uma variável não é do tipo var ou let?

Se algum parâmetro seu espera receber uma função, você tem que passá-la apenas através do nome, se você passar com () vai estar executando ela em vez de passar para o parâmetro.

Eu fiz esse teste aqui e percebi isso. Bom, e se a função tiver parâmetros para receber como será o comportamento? Já irá executar ela?

Fala Tiago, vamos lá:

Como assim? Não entendi ao certo. Uma variável não é do tipo var ou let?

Sim, existem três maneiras de declarar variáveis em JavaScript, sendo: var, let e const.

Cada uma tem suas particularidades, mas, são apenas definições de variáveis e não seus tipo.

Então, se eu fizer:

function ola() {}

Ou

var ola = function() {}

Ambas declarações são do tipo Function.

Bom, e se a função tiver parâmetros para receber como será o comportamento? Já irá executar ela?

Se ela tiver parâmetros e você invocar ela com() os parâmetros terão como valor undefined. Ou você pode informá-los:

function ola(nome, sobrenome) {
    console.log(nome, sobrenome)
}
ola('Matheus', 'Castiglioni')

Espero ter ajudado.