考慮下面的代碼:是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