不推薦使用eval的緣由有不少,
一、eval 太神祕了,以致於不少人用錯。因此不推薦使用。
好比這段代碼你應該見過:
然而實際上,咱們能夠這樣寫:
這並非eval 很差而是由於容易被用錯。
eval只是一個普通的函數,只不過他有一個快速通道通向編譯器,能夠將string變成可執行的代碼。有相似功能的還有Function , setInterval 和 setTimeout。
二、 eval不容易調試。用chromeDev等調試工具沒法打斷點調試,因此麻煩的東西也是不推薦使用的…
三、說到性能問題,在舊的瀏覽器中若是你使用了eval,性能會降低10倍。在現代瀏覽器中有兩種編譯模式:fast path和slow path。fast path是編譯那些穩定和可預測(stable and predictable)的代碼。而明顯的,eval不可預測,因此將會使用slow path ,因此會慢。
還有一個是,在使用相似於Closure Compiler等壓縮(混淆)代碼時,使用eval會報錯。
(又慢又報錯,我還推薦嗎?)
四、關於安全性,咱們常常聽到eval是魔鬼,他會引發XSS攻擊,實際上,若是咱們對信息源有足夠的把握時,eval並不會引發很大的安全問題。並且不光是eval,其餘方式也可能引發安全問題。好比:
莫名其妙給你注入一個<script src="">標籤,或者一段來歷不明的JSON-P請求,再或者就是Ajax請求中的eval代碼…