Chamar funçao antes da declaração

9 respostas
D

Galera, é muito mais uma curiosidade do que um problema em si :-o

<script type="text/javascript">
    ola();
    function ola(){
        alert("Olá");
    }
</script>

Por que nesse caso posso chamar a função antes dela ser interpretada pelo navegador?

vlww

9 Respostas

V

Ola, é algo muito simples de ser respondido,
o JavaScript não funciona de forma de LINEAR ou seja “Executa a lina 1, executa linha 2 e etc…”

Voce chamando a Function ola();
o javaScript por assim dizendo, vai procurar dentro do seu text/Javascript ate encontrar a declaração da function, independente de estar em cima ou embaixo.

espero ter ficado claro :wink:

O

Pelo que sei, no momento em que se carrega a página, todas as funções já foram indexada, quando se chama a função tal, ele busca nesse indice e executa a função…

D

vlww mesmo galera 8)

V

Precisando, estamos ai !

W

O nome disto é hoisting. As variáveis e funções são sempre movidas para o início do escopo (lembre-se que em javascript o escopo é a nível de funções, não de blocos).

Na verdade o código javascript executa de maneira linear, só nestes casos isto não ocorre por que as variáveis/funções são movidas para o início. O javascript não sai procurando definições no código. :slight_smile:

Entretanto é boa prática em javascript declarar as variáveis sempre no início do escopo (função), pra não haver enganos no decorrer do código.

D

wagnerfrancisco:
O nome disto é hoisting. As variáveis e funções são sempre movidas para o início do escopo (lembre-se que em javascript o escopo é a nível de funções, não de blocos).

Na verdade o código javascript executa de maneira linear, só nestes casos isto não ocorre por que as variáveis/funções são movidas para o início. O javascript não sai procurando definições no código. :slight_smile:

Entretanto é boa prática em javascript declarar as variáveis sempre no início do escopo (função), pra não haver enganos no decorrer do código.

Muito interessante saber esse conceito de hoisting, com certeza irei pesquisar mais sobre. vlww

D

wagnerfrancisco:
O nome disto é hoisting. As variáveis e funções são sempre movidas para o início do escopo (lembre-se que em javascript o escopo é a nível de funções, não de blocos).

Na verdade o código javascript executa de maneira linear, só nestes casos isto não ocorre por que as variáveis/funções são movidas para o início. O javascript não sai procurando definições no código. :slight_smile:

Entretanto é boa prática em javascript declarar as variáveis sempre no início do escopo (função), pra não haver enganos no decorrer do código.

wagnerfrancisco, nesse caso porém não estamos dentro de um escopo de uma função, mesmo assim esse comportamento continua?
Por “de baixo dos panos” ficaria assim:

<script type="text/javascript">  
    function ola(){  
        alert("Olá");  
    }     
    ola();   
</script>
W
dntalemao:
wagnerfrancisco:
O nome disto é hoisting. As variáveis e funções são sempre movidas para o início do escopo (lembre-se que em javascript o escopo é a nível de funções, não de blocos).

Na verdade o código javascript executa de maneira linear, só nestes casos isto não ocorre por que as variáveis/funções são movidas para o início. O javascript não sai procurando definições no código. :)

Entretanto é boa prática em javascript declarar as variáveis sempre no início do escopo (função), pra não haver enganos no decorrer do código.

wagnerfrancisco, nesse caso porém não estamos dentro de um escopo de uma função, mesmo assim esse comportamento continua? Por "de baixo dos panos" ficaria assim:
<script type="text/javascript">  
    function ola(){  
        alert("Olá");  
    }     
    ola();   
</script>

Sim, javascript tem dois tipos de escopo: global e local. Local é quando você declara variáveis/funções dentro de uma função. Global é quando você declara fora de qualquer função. Ainda, se você não declarar a variável (usando var) dentro de uma função (simplesmente atribuir um valor) ela é global também (e isso é considerado um defeito da linguagem).

Independente de ser global ou local, o hoisting funciona da mesma maneira, as variáveis são movidas para o início do escopo. Mas o ideal é sempre evitar o uso de variáveis globais.

D
wagnerfrancisco:
dntalemao:
wagnerfrancisco:
O nome disto é hoisting. As variáveis e funções são sempre movidas para o início do escopo (lembre-se que em javascript o escopo é a nível de funções, não de blocos).

Na verdade o código javascript executa de maneira linear, só nestes casos isto não ocorre por que as variáveis/funções são movidas para o início. O javascript não sai procurando definições no código. :)

Entretanto é boa prática em javascript declarar as variáveis sempre no início do escopo (função), pra não haver enganos no decorrer do código.

wagnerfrancisco, nesse caso porém não estamos dentro de um escopo de uma função, mesmo assim esse comportamento continua? Por "de baixo dos panos" ficaria assim:
<script type="text/javascript">  
    function ola(){  
        alert("Olá");  
    }     
    ola();   
</script>

Sim, javascript tem dois tipos de escopo: global e local. Local é quando você declara variáveis/funções dentro de uma função. Global é quando você declara fora de qualquer função. Ainda, se você não declarar a variável (usando var) dentro de uma função (simplesmente atribuir um valor) ela é global também (e isso é considerado um defeito da linguagem).

Independente de ser global ou local, o hoisting funciona da mesma maneira, as variáveis são movidas para o início do escopo. Mas o ideal é sempre evitar o uso de variáveis globais.

vlww mesmo, muito boa a explicação.

Criado 5 de março de 2013
Ultima resposta 6 de mar. de 2013
Respostas 9
Participantes 4