Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

como JavaScript identifica as funcoes disponiveis?

Neste exercicio criamos a funcao calculaImc (altura, peso) para que pudessemos reutilizar em outros lugares, inclusive em outros arquivos .js. Mas, como que o JavaScript identifica que existe uma funcao? Ele varre todas as funcoes declaradas em todos os arquivos daquela mesma pasta? Foi postado uma duvida na qual foi dito "Sobre reutilizar a função: quando você declara uma function ela tem escopo global e pode ser usada em qualquer outro script da sua página." e nao entendi ao certo.

8 respostas

Boa tarde Thiago,

Uma função está disponível somente no arquivo em que ela foi criada.

Para utilizarmos funções de outros arquivos essas funções precisam ser exportadas em seus arquivos e depois importadas onde queremos utiliza-las.

Um exemplo seria assim:

hello.js

// exportando uma função
export function hello() {
  return "Hello";
}

importa_hello.js

// importando a função hello
import { hello } from 'hello';  // o segundo hello é o caminho para o arquivo. O .js pode ser omitido.
let val = hello(); 

fonte

Abraços

Vinícius, eu não entendi o que você quis dizer. O instrutor não utilizou nada de import e export nas aulas. Confesso que fiquei mais confuso

Import e export são meios de utilizar funções que estão em outros arquivos. Não se preocupe com eles agora, eles estão um pouco além do que você precisa.

A aula em questão fala sobre reaproveitar funções.

Quando temos um código que é repetido muitas vezes devemos considerar transformar aquele código em uma função. Assim declaramos a função apenas uma vez e podemos reaproveitar aquele código em qualquer parte do código.

Na aula temos um código que calcula o IMC.

var imc = 0;
var altura = 180;
var peso = 80;
imc = peso / (altura * altura);

Imagine que vamos utilizar ele várias vezes no nosso código. Ao invés de termos esse código espalhado em diversas partes do código faz mais sentido termos ele em um só lugar e podermos "chamá-lo" quando precisarmos, assim:

function calculaImc(peso, altura){
    var imc = 0;

    imc = peso / (altura * altura);

    return imc.toFixed(2);
}

Quanto a utilizar funções de outros arquivos isso é ensinado em outros cursos da Alura. Mas como eu disse, não se preocupe com isso agora.

Abraços

Vinicius, o que eu nao entendi ainda seria que a funcao calculaImc pode ser chamada em outro arquivo .js sem usar import. Porque isso acontece?

Na minha organizacao de arquivos, possuo o calcula-imc.js aonde eu chamo esta mesma funcao no ad-paciente.js sem usar import (ate porque nao foi ensinado sobre).

Entao, me vem a duvida de como o JavaScript consegue reconhecer uma funcao chamada em um arquivo diferente (ad-paciente.js) na qual ela foi criada (calcula-imc.js), entende?

solução!

Bom dia, Tiago! Como vai?

Como vc bem observou, essa questão do import não precisa ser levada em consideração por vc nesse momento!

O que vc precisa ter em mente é que a priori toda função declarada tem escopo global e por isso pode ser usada em qualquer arquivo JavaScript! Isso tanto é verdade, que até mesmo do console do navegador vc consegue invocar as funções declaradas nos arquivos JS! Esse é o comportamento padrão do JS!

Faça um teste: abra o console do desenvolvedor do seu navegador preferido e experimente invocar a função calculaImc()! Vc verá que irá obter o retorno dela normalmente, mesmo estando no console do navegador!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Esta questao de toda funcao ser declarada em um escopo global seria devido ao comportamento Hoisting do JavaScript ou nao possui relacao, Gabriel?

Não tem relação, Tiago! É só o modo do JavaScript funcionar mesmo, pois por padrão, temos apenas os escopos global e funcional! Tudo que está dentro de uma função existe apenas dentro dela e tudo que está fora de qualquer função é global e pode ser acessado de qualquer lugar no mesmo arquivo ou fora dele!

Outra coisa, o teste que eu te falei pra fazer no outro comentário pode ser visto nessa aula a partir de 8:40!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Muito Obrigado, Gabriel!