成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

細(xì)說 Javascript 拾遺篇(一) : 遠(yuǎn)離 eval 函數(shù)

imtianx / 2759人閱讀

摘要:然而,函數(shù)只有在當(dāng)前作用域中直接被調(diào)用并且被調(diào)用的函數(shù)名為才會(huì)被執(zhí)行。在全局作用域下,這個(gè)字符串會(huì)一直被執(zhí)行,在這個(gè)情形下我們并沒有直接調(diào)用函數(shù),也可以執(zhí)行字符串。總結(jié)函數(shù)應(yīng)該盡可能地避免使用。

Javascripteval 函數(shù)可以在當(dāng)前作用域執(zhí)行一段包含 Javascript 代碼的字符串。

var foo = 1;
function test() {
    var foo = 2;
    eval("foo = 3");
    return foo;
}
test(); // 3
foo; // 1

然而,eval 函數(shù)只有在當(dāng)前作用域中直接被調(diào)用并且被調(diào)用的函數(shù)名為 eval 才會(huì)被執(zhí)行。

var foo = 1;
function test() {
    var foo = 2;
    var bar = eval;
    bar("foo = 3");
    return foo;
}
test(); // 2
foo; // 3

eval 函數(shù)的使用應(yīng)該被避免,99.9% 使用 eval 函數(shù)所實(shí)現(xiàn)的功能都可以通過不使用 eval 函數(shù)來實(shí)現(xiàn)。

偽裝的 eval 函數(shù)

定時(shí)函數(shù) setTimeoutsetInterval 函數(shù)都可以接受字符串作為自己的第一個(gè)參數(shù)。在全局作用域下,這個(gè)字符串會(huì)一直被執(zhí)行,在這個(gè)情形下我們并沒有直接調(diào)用 eval 函數(shù),也可以執(zhí)行字符串。

安全問題

eval 函數(shù)毫無疑問將會(huì)造成安全問題,因?yàn)樗鼤?huì)執(zhí)行任何傳給它的字符串,所以永遠(yuǎn)不要對(duì)未知或未信任源傳來的字符串使用 eval 函數(shù)。

總結(jié)

eval 函數(shù)應(yīng)該盡可能地避免使用。任何使用 eval 函數(shù)的代碼都應(yīng)該被質(zhì)疑。我覺得 @justjavac 前輩在 《js中eval()函數(shù)的用處?》 問題中的回答總結(jié)的很好,那就是“學(xué)習(xí) eval 函數(shù),并遠(yuǎn)離 eval 函數(shù)”。

  

參考

http://bonsaiden.github.io/JavaScript-Garden/#core.eval

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78096.html

相關(guān)文章

  • 細(xì)說 Javascript 遺篇(四) : setTimeout 和 setInterval

    摘要:當(dāng)間隔時(shí)間設(shè)置較小時(shí),將會(huì)導(dǎo)致回調(diào)函數(shù)堆積。處理可能阻塞的代碼最簡(jiǎn)單且最可控的方式就是在回調(diào)函數(shù)內(nèi)部使用函數(shù)。但是很明顯,由于指定最大值的限制,還會(huì)有定時(shí)器沒有被清除掉。另外,盡量避免使用函數(shù),從而避免可能導(dǎo)致的回調(diào)函數(shù)堆積現(xiàn)象。 由于 Javascript 是異步的,因此我們可以通過 setTimeout 和 setInterval 函數(shù)來指定特定時(shí)間執(zhí)行代碼。 function ...

    wangjuntytl 評(píng)論0 收藏0
  • 細(xì)說 Javascript 遺篇(二) : undefined 和 null

    摘要:有兩個(gè)可以表示空的值,分別是和,比較有作用的是前者。訪問聲明但未初始化的變量。有返回值時(shí)函數(shù)的表達(dá)式?jīng)]有顯式的返回任何內(nèi)容。然而,為了比較其他變量和值,我們需要提前取得的值。因此,從標(biāo)準(zhǔn)實(shí)行后,全局變量已經(jīng)是不再可寫。 Javascript 有兩個(gè)可以表示空的值,分別是 undefined 和 null,比較有作用的是前者。 undefined undefined 是一種值為 un...

    My_Oh_My 評(píng)論0 收藏0
  • 細(xì)說 Javascript 遺篇(三) : 自動(dòng)插入分號(hào)

    摘要:此時(shí)會(huì)自動(dòng)插入分號(hào),解析器將再次嘗試。工作原理下面的代碼沒有分號(hào),因此解析器將會(huì)自己判斷在哪些地方插入分號(hào)。前置小括號(hào)在有前置小括號(hào)的情形時(shí),解析器將不會(huì)自動(dòng)插入分號(hào)。這不僅將保證代碼整體的一致性,也將有效地避免解析器對(duì)代碼行為的錯(cuò)誤改變。 盡管 Javascript 有類似 C 的句法風(fēng)格,但是它并不強(qiáng)制在代碼中使用分號(hào),所以分號(hào)可能被省略。Javascript 并不是一個(gè)缺少分號(hào)的...

    mushang 評(píng)論0 收藏0
  • 細(xì)說 js 壓縮、sourcemap、通過 sourcemap 查找原始報(bào)錯(cuò)信息

    摘要:文件就是記錄了從源代碼文件到壓縮文件的一個(gè)代碼對(duì)應(yīng)關(guān)系記錄表,通過壓縮文件和文件可以原原本本找出源代碼文件。 細(xì)說 js 壓縮、sourcemap、通過 sourcemap 查找原始報(bào)錯(cuò)信息 1. js 壓縮 js 壓縮對(duì)前端開發(fā)者來說是一門必修課。 一般來說,壓縮 js 主要出于以下兩個(gè)目的: 減小代碼體積,加快前端資源加載速度 保護(hù)源代碼不被別人獲取 壓縮 js 使用的工具庫:...

    douzifly 評(píng)論0 收藏0
  • 「干貨」細(xì)說 Javascript 中的浮點(diǎn)數(shù)精度丟失問題(內(nèi)附好課推薦)

    摘要:前言最近,朋友問了我這樣一個(gè)問題在中的運(yùn)算結(jié)果,為什么是這樣的雖然我告訴他說,這是由于浮點(diǎn)數(shù)精度問題導(dǎo)致的。由于可以用階碼移動(dòng)小數(shù)點(diǎn),因此稱為浮點(diǎn)數(shù)。它的實(shí)現(xiàn)遵循標(biāo)準(zhǔn),使用位精度來表示浮點(diǎn)數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 問了我這樣一個(gè)問題:在 chrome 中的運(yùn)算...

    senntyou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<