2016-12-05 107 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

相關問題