eval () 在这个 Javascript 代码中危险吗?



我在下面的案例中发现了一个关于 eval(( 危险的类似问题,但答案并没有解决问题并回答了它是否危险,它只是提出了另一种方法。这就是为什么我再次询问希望得到新的答案。它也被张贴在2016

所以我想传递一个条件作为参数,我知道这可以是一个函数,但我读过eval ()new function () {return ...;}快 67%,这就是我使用 eval (( 的原因

这是代码

var a = [0];
function LoopWithDelay (func, delay, param, condition){
	console.log(eval (condition));
	
if (eval (condition)) {
		func (param);
		setTimeout (LoopWithDelay, delay, func, delay, param, condition);
	}
}
function increment (x){
	x[0] += 5;
}
LoopWithDelay (increment, 1000, a, "a[0]<10" );

调用LoopWithDelay()函数时,我将最终参数(条件(作为字符串传递,以便在函数eval (condition)内对其进行计算

在这种情况下使用eval()有错吗?

[编辑]
我的主要重点是使这段代码可重用并消除冗余。这就是为什么我想将条件作为参数传递。

示例:
在测试应用程序中,屏幕根据剩余时间以不同的速度闪烁。
如果t = 0s每2000ms闪烁一次,如果每1000ms

闪烁10s<20s,依此类推。>

看起来您只是在尝试进行动态测试,该测试可以对运行时代码中更改的内容做出反应。您通常通过将函数作为参数传递来执行此操作,而不是带有稍后"eval((ed"代码的字符串。这是您通常传递"行为"或评估仅在运行时可用的内容的方式。这在javascript中常见。这具有相同的行为,但不需要eval()

var a = [0];
function LoopWithDelay(func, delay, param, condition) {
let condition_val = condition()
console.log(condition_val);
if (condition_val) {
func(param);
setTimeout(LoopWithDelay, delay, func, delay, param, condition);
}
}
function increment(x) {
x[0] += 5;
}
// capture `a` in the closure of the passed-in function
LoopWithDelay(increment, 1000, a, () => a[0] < 10);

最新更新