Назначение возвращаемого значения JS-функции переменной завершается ошибкой

У меня есть простой HTML-документ и JS-файл, и я не могу понять, почему этот простой код не работает.

Вот index.html:

<!DOCTYPE HTML>
<html>
    <head>
        <script>
        function getStatus() {
            alert('test 1');
            var isOnline = isOnline();
            alert('test 3');
        }

        function isOnline() {
            alert('test 2');
            return true;
        }
        </script>
    </head>
    <body>
        <script>getStatus();</script>
    </body>
</html>

Он отображает только предупреждение «Тест 1», а затем ничего. Если я удалю вызов функции isOnline(), он без проблем отобразит предупреждение «Тест 1», за которым следует предупреждение «Тест 3». Я получаю Uncaught TypeError: isOnline is not a function в консоли браузера.

Ошибка консоли браузера

Обновлено:

Оказывается, это произошло из-за того, что я назвал свою переменную тем же именем, что и моя функция. Я новичок в JavaScript и не знал об этом ограничении.

jsfiddle.net/o8ge4m3d Невозможно воспроизвести, но проверьте консоль на наличие ошибок
CertainPerformance 29.08.2018 02:58

Какое сообщение об ошибке появляется в консоли?

klewis 29.08.2018 03:18

В вашем коде нет ошибки, он отлично работает

Ramesh 29.08.2018 03:44

Я добавил в вопрос скриншот ошибки из консоли браузера. В нем говорится: Uncaught TypeError: isOnline не является функцией

Ryan Palmer 29.08.2018 06:35

Я удалил несколько вещей, когда делился кодом здесь, и, как оказалось, удалил важную часть. Если вы присваиваете значение, возвращаемое функцией isOnline(), переменной, это вызывает ошибку. Вот почему никто не мог воспроизвести, я не думал, что это будет актуально. Я обновил свой вопрос с этой подробностью.

Ryan Palmer 29.08.2018 06:48

Оказывается, это произошло из-за того, что я назвал свою переменную тем же именем, что и функция. Я новичок в JavaScript и не знал, что это запрещено.

Ryan Palmer 29.08.2018 06:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
51
3

Ответы 3

Обычно оповещение может быть выполнено один раз для каждого взаимодействия. Хотя я пробовал ваш код с помощью chrome devtools, и он работает. Это может быть потому, что ваш html-файл читает ваш js-файл, чтобы предупредить, а затем завершить функцию.

function getStatus() {
alert("1");
isOnline();
alert("3");
}
function isOnline() {
alert("2");
}
getStatus();

Успешно.

http://jsfiddle.net/humskoa3/2/

<!DOCTYPE HTML>
<html>
<head>
    <script>
        function getStatus() {
                alert('Test 1');
            isOnline();
                alert('Test 3');
                }

                function isOnline() {
              alert('Test 2');
                }
    </script>
</head>
<body>
    <script>getStatus();</script>
</body>

Почему бы нет?

снова тест!

Это связано с тем, что я назвал свою переменную тем же именем, что и моя функция.

Другие вопросы по теме