JavaScript的“eval”是同步还是异步的?

4
请问需要翻译的内容是什么?
eval(".....;a=5;b=10;");
eval("a+b");

如果第一个 eval 运行时间很长,那么我的下一个 eval 是否会返回错误,说明 a 和 b 未定义,因为 a 和 b 的值是在第一个 eval 结束时初始化的。eval 方法是同步还是异步运行的?

2
完全同步化 - Alexander Taran
eval是同步的。 - Alon
2个回答

2

eval 是同步执行的。

让我们看一个例子:

console.log("before")
eval("console.log('eval')");
console.log("after");

您可以看到打印顺序是按照顺序进行的。

如果是异步的情况,例如在这种情况下:

console.log("before");
setTimeout(()=>console.log("asynchronous"),0)
console.log("after")

异步运行之后。

2

eval是同步的。但是在eval中的表达式可能包含异步代码,比如setTimeout或者setInterval

举个例子。

方法1:(同步示例)

eval('var a=5, b=10;');
eval('console.log(a+b)');

方法二: (异步示例)

eval('setInterval(function(){window["a"]=5, window["b"]=10;}, 1000)');
eval('console.log(typeof a)');

注意: 无论如何,不建议使用eval,如https://dev59.com/c3VD5IYBdhLWcg3wGXpI#86580所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接