摘要:然而,函數(shù)只有在當(dāng)前作用域中直接被調(diào)用并且被調(diào)用的函數(shù)名為才會(huì)被執(zhí)行。在全局作用域下,這個(gè)字符串會(huì)一直被執(zhí)行,在這個(gè)情形下我們并沒有直接調(diào)用函數(shù),也可以執(zhí)行字符串。總結(jié)函數(shù)應(yīng)該盡可能地避免使用。
Javascript 的 eval 函數(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ù) setTimeout 和 setInterval 函數(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
摘要:當(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 ...
摘要:有兩個(gè)可以表示空的值,分別是和,比較有作用的是前者。訪問聲明但未初始化的變量。有返回值時(shí)函數(shù)的表達(dá)式?jīng)]有顯式的返回任何內(nèi)容。然而,為了比較其他變量和值,我們需要提前取得的值。因此,從標(biāo)準(zhǔn)實(shí)行后,全局變量已經(jīng)是不再可寫。 Javascript 有兩個(gè)可以表示空的值,分別是 undefined 和 null,比較有作用的是前者。 undefined undefined 是一種值為 un...
摘要:此時(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)的...
摘要:文件就是記錄了從源代碼文件到壓縮文件的一個(gè)代碼對(duì)應(yīng)關(guān)系記錄表,通過壓縮文件和文件可以原原本本找出源代碼文件。 細(xì)說 js 壓縮、sourcemap、通過 sourcemap 查找原始報(bào)錯(cuò)信息 1. js 壓縮 js 壓縮對(duì)前端開發(fā)者來說是一門必修課。 一般來說,壓縮 js 主要出于以下兩個(gè)目的: 減小代碼體積,加快前端資源加載速度 保護(hù)源代碼不被別人獲取 壓縮 js 使用的工具庫:...
摘要:前言最近,朋友問了我這樣一個(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)算...
閱讀 3804·2021-09-23 11:32
閱讀 2470·2021-09-06 15:01
閱讀 1630·2021-08-18 10:24
閱讀 3468·2019-12-27 11:44
閱讀 3615·2019-08-30 15:52
閱讀 2522·2019-08-30 11:11
閱讀 696·2019-08-29 17:27
閱讀 608·2019-08-29 16:22