Define Const Variable Using Eval()
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()"