Javascript "eval"同步的还是异步的?



考虑以下代码:

eval(".....;a=5;b=10;");
eval("a+b");

如果此处的第1次评估长期运行,我的下一个评估是否会返回一个错误,因为A和B不确定,因为A和B值在第1次评估结束时初始化。eval方法会同步或异步运行

eval本质上是同步的。但是eval内的评估/表达式可能具有异步代码,例如setTimeoutsetInterval

用于实例。

方法1 :(同步示例)

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

方法2 :(异步示例)

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

注意:无论如何,不建议使用https://stackoverflow.com/a/86580/7055233

中提到的eval

eval是同步的。

让我们查看此示例:

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

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

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

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

之后的异步运行

最新更新