我們介紹整個ECMAScript語言中最強大的一個方法:eval()。eval()方法就像是一個完整的ECMAScript解析器,它只接受一個參數(shù),即要執(zhí)行的ECMAScript(或JavaScript)字符串??聪旅娴睦樱?
eval("alert('專業(yè)做網(wǎng)站')");
這行代碼的作用等價于下面這行代碼:
alert("專業(yè)做網(wǎng)站");
當解析器發(fā)現(xiàn)代碼中調(diào)用eval()方法時,它會將傳人的參數(shù)當作實際的ECMAScript語句來解析,然后把執(zhí)行結(jié)果插入到原位置。通過eval()執(zhí)行的代碼被認為是包含該次調(diào)用的執(zhí)行環(huán)境的一部分,因此被執(zhí)行的代碼具有與該執(zhí)行環(huán)境相同的作用域鏈。這意味著通過eval()執(zhí)行的代碼可以引用在包含環(huán)境中定義的變量,舉個例子:
var msg="hello world";
eval("alert(msg)"); //"hello world"
可見,變量msg是在eval()調(diào)用的環(huán)境之外定義的,但其中調(diào)用的alert()仍然能夠顯示"helloworld"。這是因為上面第二行代碼最終被替換成了一行真正的代碼。同樣地,我們也可以在eval()調(diào)用中定義一個函數(shù),然后再在該調(diào)用的外部代碼中引用這個函教:
eval("function sayHi() (alert('hi');)");
sayHi();
南昌網(wǎng)絡(luò)公司技術(shù)人員提示,函數(shù)sayHi是在eval()內(nèi)部定義的,但由于對eval()的調(diào)用最終會被替代換成定義函數(shù)的實際代碼,因此可以在下一行調(diào)用sayHi().
能夠解釋代碼字符的能力非常強大,但也非常危險.因此在使用eval()時必須極為謹慎,特別是在用它執(zhí)行用戶輸入數(shù)據(jù)的情況下.否則,可能會有惡意用戶輸入威脅你的站點或應(yīng)用程序安全代碼(即所謂的代碼注入).
本資料僅限南昌網(wǎng)站制作公司百恒網(wǎng)絡(luò)技術(shù)部內(nèi)部人員交流使用,方便內(nèi)部技術(shù)人員學(xué)習(xí)交流,請勿作其他用途.謝謝支持!
文章出自:南昌建網(wǎng)站公司-百恒網(wǎng)絡(luò) http://www.myforexfactory.net 如轉(zhuǎn)載請注明出處