2016-12-05 108 views
1

考虑下面的代码:是Javascript“eval”同步还是异步?

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

如果万一在这里第一次EVAL长时间运行时,将我的下一个EVAL返回一个错误提,因为A和B是不确定的,因为a和b值在初始化第一评价结束。 eval方法是同步还是异步运行

+2

完全以syncronous –

+0

EVAL提的是同步 – Alon

+1

[关于使用eval强制性警告(http://stackoverflow.com/q/86513/ 5743988) – 4castle

回答

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中的评估/表达式可能具有异步代码,如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)');

注意:不管怎么说,我们不推荐使用evalhttps://stackoverflow.com/a/86580/7055233

相关问题