ti-enxame.com

Função e variável com o mesmo nome

O seguinte trecho de código é um teste para ver o que acontece quando uma função e uma variável compartilham o mesmo nome no mesmo escopo. Em Chrome, parece que a definição da variável tem precedência na referência.

  1. A função nomeada pode ser executada ou é completamente obscurecida pela declaração da variável?
  2. É o comportamento padrão em Javascript que variáveis ​​têm precedência sobre funções com o mesmo nome?

Desculpe pela pergunta em duas partes, mas parecia um desperdício fazer duas perguntas separadas.

Código:

<!DOCTYPE html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script>

            var overlapping = function() { return 'this is a var holding an anonymous function' };

            function overlapping()
            {
                return 'this is a function definition';
            }

            output( overlapping, 'overlapping' );
            output( overlapping(), 'overlapping()' );

            function output( expression, description )
            {
                document.writeln( '<li>' + ( description ? ('<i>' + description + '</i>: ') : '' ) + expression + '</li>' );
            }
        </script>
    </body>
</html>
28
Mark Fox

Em JavaScript, as definições de função são colocadas no topo do escopo atual. Seu código de exemplo, portanto, lê-se como:

var overlapping = function() { return 'this is a function definition' };
var overlapping = function() { return 'this is a var holding an anonymous function' };

Esta é uma boa leitura sobre este tópico: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting

18
Niko