考虑下面的代码:是Javascript“eval”同步还是异步?
eval(".....;a=5;b=10;");
eval("a+b");
如果万一在这里第一次EVAL长时间运行时,将我的下一个EVAL返回一个错误提,因为A和B是不确定的,因为a和b值在初始化第一评价结束。 eval方法是同步还是异步运行
考虑下面的代码:是Javascript“eval”同步还是异步?
eval(".....;a=5;b=10;");
eval("a+b");
如果万一在这里第一次EVAL长时间运行时,将我的下一个EVAL返回一个错误提,因为A和B是不确定的,因为a和b值在初始化第一评价结束。 eval方法是同步还是异步运行
eval
是同步的。
让我们看看下面这个例子:
console.log("before")
eval("console.log('eval')");
console.log("after");
你可以看到在打印的顺序。
如果在这种情况下是异步例如:
console.log("before");
setTimeout(()=>console.log("asynchronous"),0)
console.log("after")
后的异步运行。
eval
本质上是同步的。但eval
中的评估/表达式可能具有异步代码,如setTimeout
或setInterval
。
举个例子。
方法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)');
注意:不管怎么说,我们不推荐使用eval
为https://stackoverflow.com/a/86580/7055233
完全以syncronous –
EVAL提的是同步 – Alon
[关于使用eval强制性警告(http://stackoverflow.com/q/86513/ 5743988) – 4castle