eval is evil
Published on
Did you know that eval
's content see the current context? I mean, const x = 1; return eval('x')
will return 1.
Well, that's not all the magic.
const x = 1;
eval('x + 2') // 3
const x = 1;
window.eval('x + 2') // Uncaught ReferenceError: x is not defined
const x = 1;
const eval2 = eval;
eval2('x + 2') // Uncaught ReferenceError: x is not defined
const x = 1;
(0, eval)('x + 2') // Uncaught ReferenceError: x is not defined
The first one is called "direct eval" and the rest are "indirect evals".
TIL that Vite (esbuild) warns you about using direct evals. See the reasons here.