function func1(str) {
eval(str);
newVar = 100;
function func2() {
console.log(bar);
console.log(newVar);
}
func2();
}
func1("bar = 42;");
我讀過的eval()函數的關鍵字應該避免,因爲它欺騙詞彙範圍(這會導致代碼運行速度較慢)。通過上面的例子(或者其他任何人的例子)的上下文,我試圖理解這種編譯器優化可能會最終破裂。究竟怎樣的eval()關鍵字破編譯器優化的JavaScript
看着這條線newVar = 100;這個變量也將在執行階段由引擎創建(在全局範圍內)。我認爲這不等於「欺騙」詞彙範圍。那麼eval的問題(「bar = 42;」)基本上做了類似的事情?希望問題清楚。
如果引擎知道哪些部件可以看到並將使用(提前,在解析時),則函數可以運行得更快。在''use strict'中不工作的代碼'是一個很好的符號,你正在使用'eval()'次優。 – dandavis
你在這裏問什麼? – amanuel2
想象一個外科醫生執行程序的功能;如果患者的X線片上有不清晰的區域,則在進行仔細的手術探查時需要更長時間才能完成手術。 – dandavis