setTimout неопределенная функция - PullRequest
0 голосов
/ 17 ноября 2018

когда я вызываю функцию с помощью setTimout следующим образом:

function f2() { console.log("hey"); }
setTimeout("f2()", 3000);

Работает отлично.

Но когда я обертываю все внутри функции f1 так:

function f1() {
  function f2() { console.log("hey"); }
  setTimeout("f2()", 3000);
}

f1();

Я получаю сообщение об ошибке: f2 не определено. Почему это происходит, и как я могу обойти это?

1 Ответ

0 голосов
/ 17 ноября 2018

setTimeout - это асинхронный вызов.Он позволит продолжить работу остальной части кода, пока не будет достигнута задержка.Когда это происходит, если переданное значение является строкой, эта строка должна быть оценена, например, eval("f2()").Но поскольку код уже прошел, функция f2 больше не находится в видимой области видимости и поэтому не может быть найдена.

Вместо использования строки просто передайте ссылку на функцию напрямую

setTimeout(f2,3000)

demo

function f1(){
  function f2(){ console.log("f2 logging"); }
  
  setTimeout(f2,3000);
}
f1();
...