我在想,
除了Eval
之外再次激活解释器,导致开销,
当JS
向服务器发送数据(eval'd
)时,唯一可能是坏的情况(除了我刚刚写的内容)。
我没有看到任何其他情况,如果用户想要使用js,他将仅在他的浏览器界限中播放(除非JS与服务器进行交互)。
我是对的吗?
我很乐意纠正。
答案 0 :(得分:3)
严格地说,使用eval
实际上并没有任何障碍,因为它只能做浏览器控制台已经可以做的事情。
存在潜在的注入危险,但这与将任何用户提供的输入放入<script>
标记的风险相同,而不是eval
的特殊性。
避免eval
的主要原因是因为它必须解释一个字符串。现在,公平地说,只运行一个JavaScript文件基本上与在整个文件上调用一个很大的eval
(广义上说)相同,因为JavaScript被解释(或者最多在运行时编译)。因此,稀疏地使用eval
只会运行,例如,当用户点击按钮时,就可以了。只有在eval
频繁运行时才会出现明显的效果,例如在循环中。这就是人们总是告诉你将函数传递给setTimeout
而不是字符串的原因。例如。
也就是说,总是是使用eval
的替代方法。它可能需要重写旧代码的一部分,但它总是可以避免的。