Даже после определения функции возникает ошибка и говорят, что функция не определена

В JavaScript После вызова getSavedTodos()

Произошла ошибка, Uncaught ReferenceError: getSavedTodos не определен

ошибка возникает даже после определения функции getSavedTodos()

Я использую код VS

const todos = getSavedTodos()


const filters = {
    search: '',
    hideFalseStates: false
}


const getSavedTodos = function() {
    const todoJSON=localStorage.getItem('todo')
    if (todoJSON !== null) {
        return JSON.parse(todoJSON)
    }
}

не знаю возникновения ошибки, что-то изменилось в формате кода?

Невозможно вызвать его, пока он не будет определен. Если бы это был объявление функции, он бы поднялся и работал бы.

charlietfl 13.04.2019 17:30
Поведение ключевого слова "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) для оценки ваших знаний,...
3
1
130
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужно объявить функцию перед переменной, которая на нее ссылается.

const filters = {
    search: '',
    hideFalseStates: false
}

const getSavedTodos = function() {
    const todoJSON = localStorage.getItem('todo')
    if (todoJSON!==null) {
        return JSON.parse(todoJSON)
    }
}

const todos = getSavedTodos()
Ответ принят как подходящий

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

const todos = getSavedTodos() //<-- Move this to after you defined the function

const filters = {
    search: '',
    hideFalseStates: false
}


const getSavedTodos = function(){
    const todoJSON = localStorage.getItem('todo')
    if (todoJSON !== null) {
        return JSON.parse(todoJSON)
    }
}

Вы используете его до, вы определяете его.

У вас есть два варианта:

  1. Просто переместите свое определение вверх, прежде чем использовать его:

    const getSavedTodos=function(){
        const todoJSON=localStorage.getItem('todo')
        if (todoJSON!==null)
        {
            return JSON.parse(todoJSON)
        }
    }
    
    const todos = getSavedTodos()
    
    const filters = {
        search: '',
        hideFalseStates: false
    }
    
  2. Используйте функцию декларация, а не функцию выражение, так как они подняты (они оцениваются перед пошаговой оценкой кода):

    const todos = getSavedTodos()
    
    const filters = {
        search: '',
        hideFalseStates: false
    }
    
    function getSavedTodos(){
        const todoJSON=localStorage.getItem('todo')
        if (todoJSON!==null)
        {
            return JSON.parse(todoJSON)
        }
    }
    

Вы можете вызвать функцию, которая определена позже, только если вы используете объявление function...

foo(); // works
function foo() {
    console.info("Hey");
}

если вместо этого вы назначаете функцию переменной, то привязка является обычным назначением, и вы можете вызвать ее только после того, как назначение было выполнено:

bar(); // Doesn't work, move after to get it working
var bar = function() {
    console.info("Hey");
};

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