Задать вопрос
@Roweb
Верстальщик

Почему функция не объявлена?

window.addEventListener('load', function() {
function f(){
  console.log('12');
}
setInterval('f()', 1000)
 })


Объявляю функция f(), вызываю ее через setInterval, но браузер сыпет ошибки о том, что f не объявлена. Я так понимаю это связано с замыканиями
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Потому что закавыченный код выполняется в глобальной области видимости. Так устроены функции setInterval и setTimeout, увы и ах. Пример:
function test() {
	let x = 123;
	setTimeout("alert(x)",0); // x не видна
}
test();

Если нужна именно строка, то оберните код в функцию eval, она выполняется в локальной области видимости:
function onload() {
	function f(){
		console.log('12');
	}
	setInterval(e=>eval("f()"), 1000)
}
onload();

Иначе просто используйте ссылку на саму функцию, то есть f вместо "f()"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы