【发布时间】:2015-05-08 06:48:41
【问题描述】:
根据MDN-EVAL
您不能通过 eval() 以外的名称调用 eval 函数来间接使用它;如果这样做,可能会发生运行时错误。例如,您不应该使用以下代码:
var x = 2; //1
var y = 4; //2
var myEval = eval; //3
eval("x + y"); //4
myEval("x + y"); //5
正常情况下,JavaScript 不会介意var someReference = someFunctionReference;,但是 eval 是特殊情况,所以我可以期待一些惊喜。
现在让我们看看下面的一些非严格模式下的运行
- Firefox/Aurora(V39.0) 不介意,上面的代码运行良好。
- Chrome(V 42.0.2311.135 m) 和 V8 4.2.77.18 运行良好。 (V8 版本取自 chrome://version/)
- Node(V0.10.35) 与 V8 3.14.5.9 抱怨错误
x在第 5 行未定义 (V8 版本取自节点 -e "console.log(process.versions.v8)")
现在我的问题是为什么会有不同的行为,以及这种编码风格如何/何时会给我的程序带来风险。
P.S.://4 行在任何运行中都不会抱怨任何错误而且我在上面运行中的假设是 chrome/firefox 控制台在非严格模式下运行。
【问题讨论】:
-
可能是出于某种形式的安全原因。但是您是否尝试过在 Node 中使用
eval("x + y")来查看引用eval是否与您的问题或红鲱鱼有关? -
eval//4行在任何运行中都不会出错 -
这句话来自 MDN 坦率地说是垃圾;它可能是几年前的遗留物,在间接
eval的行为建立之前。 MDN 是一个社区编辑的站点。虽然质量通常非常高,但有时你会得到一些奇怪的东西。这是其中之一。间接eval有很多完全有效的用法。我要去修了…… -
修正了 MDN 文章。
-
是的...我可以看到更新...非常感谢 :)
标签: javascript eval