Потому что закавыченный код выполняется в глобальной области видимости. Так устроены функции
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()"