В 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)
}
}
не знаю возникновения ошибки, что-то изменилось в формате кода?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно объявить функцию перед переменной, которая на нее ссылается.
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)
}
}
Вы используете его до, вы определяете его.
У вас есть два варианта:
Просто переместите свое определение вверх, прежде чем использовать его:
const getSavedTodos=function(){
const todoJSON=localStorage.getItem('todo')
if (todoJSON!==null)
{
return JSON.parse(todoJSON)
}
}
const todos = getSavedTodos()
const filters = {
search: '',
hideFalseStates: false
}
Используйте функцию декларация, а не функцию выражение, так как они подняты (они оцениваются перед пошаговой оценкой кода):
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");
};
Невозможно вызвать его, пока он не будет определен. Если бы это был объявление функции, он бы поднялся и работал бы.