摘要:不單單是因為引起的。用與要注意的地方這里要注意的是這二個函數的第一個參數都會把指向還有第一個參數可以為但不要這樣用因為這樣等于自己隱式使用了。
自動分號插入
Js不像其他語言強制要求;號結尾不然編譯不過,原因是JS有自動;號的插入。
var text=function(){} text()
這樣你不加;號也能運行其實在內部js是需要;號去幫助解析的
var text=function(){}; //沒有;號解析報錯,JS則自動加入;號
然后JS插入;號有一個固定的規則,但這規則并不能適用于任何場景就會把;號插亂。
結論
建議絕對不要省略分號,同時也提倡將花括號和相應的表達式放在一行,對于只有一行代碼的 if 或者 else 表達式,也不應該省略花括號。這些良好的編程習慣不僅可以提到代碼的一致性,而且可以防止解析器改變代碼行為的錯誤處理。
這并不是eval 不好而是因為容易被用錯。
eval只是一個普通的函數,只不過他有一個快速通道通向編譯器,可以將string變成可執行的代碼。有類似功能的還有Function , setInterval 和 setTimeout。
1、 eval不容易調試。用chromeDev等調試工具無法打斷點調試,所以麻煩的東西也是不推薦使用的…
2、說到性能問題,在舊的瀏覽器中如果你使用了eval,性能會下降10倍。在現代瀏覽器中有兩種編譯模式:fast path和slow path。fast path是編譯那些穩定和可預測(stable and predictable)的代碼。而明顯的,eval不可預測,所以將會使用slow path ,所以會慢。
還有一個是,在使用類似于Closure Compiler等壓縮(混淆)代碼時,使用eval會報錯。
(又慢又報錯,我還推薦嗎?)
3、關于安全性,我們經常聽到eval是魔鬼,他會引起XSS攻擊,實際上,如果我們對信息源有足夠的把握時,eval并不會引起很大的安全問題。而且不光是eval,其他方式也可能引起安全問題。比如:
莫名其妙給你注入一個