2010-08-16 48 views
12

,如果我沒有記錯的eval一個給定的字符串中執行有效的代碼爲什麼人們說javascript eval()是邪惡的,但你不會反對setTimeout和setInterval等?

eval("alert('hey')"); 

setTimeout("alert('hey')",1000); 

不只是對同一件事情,只能用一個定時器。設置超時與eval一樣危險?

+3

問得好:)我想答案是肯定的 這裏更多 http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-邪惡 – mplungjan 2010-08-16 09:41:52

回答

20

我想說你聽到同樣的反對意見。 setTimeout(帶有字符串而不是函數參數)與eval幾乎相同。

如果可能的話,

setTimeout(function(){ alert ("hey") ; }, 1000); 
+0

沒有理由不應該有可能 – 2010-08-16 09:45:37

+8

+ +1提供正確使用'setTimeout'的例子。傳遞字符串參數的能力可能會造成更多的傷害,而不是好的人們如何使用javascript – 2010-08-16 09:46:00

+0

+1看起來我的代碼需要一些安全更改;)謝謝,嗯,我並不完全知道你可以使用超時這種方式,以及嗯 – 2010-08-16 09:46:54

4

因爲當人們說「eval」時,他們的意思是「eval和任何與eval等價或多或少的函數」,但前者要短得多。 所以你的問題的答案是肯定的,這是危險的。

相關問題