Как вызвать функцию в js?
Уже третий вечер на этом сижу и злюсь, в консоли пусто, ошибок ноль, просто ничего не происходит. По видео делал один в один, урок 14 минут, там у него всё работает. А у меня ничего.
Программирование
Работа и карьера
Компьютеры и связь
Учёба и образование
Животные и питомцы
Ваш вопрос
Уже третий вечер на этом сижу и злюсь, в консоли пусто, ошибок ноль, просто ничего не происходит. По видео делал один в один, урок 14 минут, там у него всё работает. А у меня ничего.
Смотри, тут все просто, но нюансов хватает.
Способ вызова | Когда использовать myFunction() | функция объявлена в этом же файле и видна в области видимости window.myFunction() | нужно явно обратиться к глобальному объекту в браузере obj.method() | функция это метод объекта, вызываешь через точку myFunction.call(ctx) | нужно подставить свой this при вызове setTimeout(myFunction, 0) | вызов передается как коллбэк, скобки не ставишь
Главная ошибка новичков — путать объявление функции с её вызовом. Написал function greet() {} — это только создал инструмент, но не запустил его. Скобки в конце это и есть команда сработать прямо сейчас. Без скобок greet без ничего это просто ссылка на саму функцию как объект, её можно передать куда-то дальше, например в addEventListener, и вот там уже браузер вызовет её сам в нужный момент.
Второй момент — порядок в файле. Если функция объявлена через function greet() {}, ты можешь вызвать её выше по коду, движок сначала соберет все такие объявления. А если через const greet = () => {}, так не выйдет, вызов должен идти строго после строки с объявлением, иначе получишь ошибку про то что переменная еще не инициализирована.
Третий момент, о котором забывают — асинхронные функции. Если функция помечена async, вызов возвращает промис, а не сразу результат, поэтому просто написать const data = fetchData() не сработает, нужен await или .then у промиса.
Вызов функции в JavaScript это всегда имя плюс круглые скобки, myFunction(), и внутри скобок через запятую перечисляются аргументы, если функция их ожидает, а если не ожидает, скобки все равно нужны, просто пустые, потому что без скобок вы получаете саму функцию как значение, а не результат её работы, и если функция объявлена как метод объекта, вызов идет через точку, obj.metod(), а если функция асинхронная, помечена словом async, то её вызов возвращает промис, и чтобы получить настоящий результат, нужен await перед вызовом или .then после него, иначе в переменной окажется не число или строка, а объект Promise, что часто сбивает с толку новичков.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Ответить на вопрос