Подтвердить что ты не робот

Функция и переменная с тем же именем

Следующий фрагмент кода - это тест, чтобы увидеть, что происходит, когда функция и переменная имеют одно и то же имя в той же области. В Chrome кажется, что определение переменной имеет приоритет в ссылке.

  • Может ли именованная функция выполняться или полностью закрыта объявлением переменной?
  • Является ли это стандартным поведением в Javascript, что переменные имеют приоритет над функциями с тем же именем?

Извините за вопрос из двух частей, но казалось, расточительно задавать два отдельных вопроса.

код:

<!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>
4b9b3361

Ответ 1

В JavaScript определения функций поднимаются в верхней части текущей области. Поэтому ваш примерный код читается как:

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

Это хорошо читается по этой теме: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting