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