Skip to content Skip to sidebar Skip to footer

Define Const Variable Using Eval()

When I try to define a variable using var, everything is working. But defining it as const is not working as expected and the variable is undefined. I have tested it on Chrome and

Solution 1:

Using let and const in eval code doesn't invoke strict mode. let and const are lexicalDeclarations, which limits their scope to the enclosing lexical scope.

A lexical scope is created by a block and by direct call to eval (see Runtime Semantics: PerformEva step 12).


Solution 2:

That is because const turns on the strict mode by default. See what happens when you turn on the strict mode for both examples explicitly:

window.eval("'use strict'; var v = 5;");
document.body.innerHTML += window.v === undefined;

window.eval("'use strict'; const l = 5;");
document.body.innerHTML += window.l === undefined;

For more info on the strict mode see:

In particular this part:

Second, eval of strict mode code does not introduce new variables into the surrounding scope. In normal code eval("var x;") introduces a variable x into the surrounding function or the global scope. This means that, in general, in a function containing a call to eval every name not referring to an argument or local variable must be mapped to a particular definition at runtime (because that eval might have introduced a new variable that would hide the outer variable). In strict mode eval creates variables only for the code being evaluated, so eval can't affect whether a name refers to an outer variable or some local variable [emphasis added]

See also this article:


Post a Comment for "Define Const Variable Using Eval()"