请考虑两段代码(第一段打印“Local eval”,第二段打印“Global eval”):
(function f() {
var x;
try {
eval("x");
console.log('Local eval');
}
catch (e) {
console.log('Global eval');
}
}())
和
var globalEval = eval;
(function f() {
var x;
try {
globalEval("x");
console.log('Local eval');
}
catch (e) {
console.log('Global eval');
}
}())
事实证明,即使 globalEval === eval
的计算结果为 true
,globalEval
和 eval
< em>表现不同 因为他们有不同的名字。 (如果 eval 精确地写成 eval
,则它只能是本地的。)
如何区分两个评估?有没有办法提取变量标签来推断行为?
最佳答案
很有趣。但是由于您可以控制定义对 eval
的引用的位置/时间,因此您可以说出如何区分它们。例如,有一个对象具有“函数指针”和一些指示范围的东西 - 如果你定义它,你就知道你的立场。
即myEvaluator.scope
会告诉您有关 eval 范围在哪里被捕获的信息,myEvaluator.eval
可用于评估。
关于javascript - 区分局部评估和全局评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150424/