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

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

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

Ответы [ 4 ]

4 голосов
/ 13 апреля 2019

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

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

  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 голосов
/ 13 апреля 2019

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

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 голос
/ 13 апреля 2019

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

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

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

bar(); // Doesn't work, move after to get it working
var bar = function() {
    console.log("Hey");
};
1 голос
/ 13 апреля 2019

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

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


   const getSavedTodos=function(){

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

}

const todos = getSavedTodos()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...