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

#javascript #function

#javascript #функция

Вопрос:

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

Возникает ошибка, неперехваченная ошибка ссылки: getSavedTodos не определен

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

Я использую VS code

 const todos = getSavedTodos()


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


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

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

Комментарии:

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

Ответ №1:

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

 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)
    }
}
  

Ответ №2:

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

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

  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)
        }
    }
      

Ответ №3:

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

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

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

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

Ответ №4:

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

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

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

const todos = getSavedTodos()