Aquí está el ejemplo de cómo aparece en las herramientas de desarrollo de Chrome:
setTimeout(console.log(`String`), 100);Cadena Se negó a evaluar una cadena como JavaScript porque 'unsafe-eval' no es una fuente de script permitida en la siguiente directiva de Política de seguridad de contenido: "script-src'self' 'unsafe-inline' https:".
¿Qué significa esta alerta y cuál es el problema de seguridad de usar setTimeout con cadenas?
Estás usando setTimeout mal.
Cuando agrega paréntesis después de una función en JS, inmediatamente llama a la función y "reemplaza" la expresión con el valor de retorno de esa función.
Pero, con setTimeout , no desea llamar a esa función, ¡quiere que setTimeout la llame! Para hacer eso, le das la función a setTimeout sin llamarlo, y setTimeout lo llamará internamente cuando suene el temporizador.
Pero su código llama a la función, console.log , y solo le da su valor de retorno ( undefined ) a setTimeout . Sin embargo, setTimeout no arroja un error: tiene una "característica" antigua que, si le pasa una cadena, la evalúa como si hubiera usado eval .
undefined no es una cadena, pero tampoco es una función, por lo que cuando el temporizador expire, setTimeout lo convertirá en una cadena ( "undefined" ) e intentará eval . Por eso recibes la advertencia.
Puede solucionar esto pasando su función a setTimeout "de la buena manera": envuelva su llamada en otra función. De esta manera, su función externa llamará a console.log cuando se llame, por lo que puede pasar eso a setTimeout :
setTimeout(() => console.log(`String`), 100);