JavaScript中eval函數(shù)的問(wèn)題
今天看代碼,遇到一個(gè)eval函數(shù)的問(wèn)題,到現(xiàn)在翻了很多博文,還是不是很懂eval函數(shù),有個(gè)一直沒(méi)法理解的代碼如下:
/* var start = [] , end = [] , timings = []; */ function f(){ //模擬程序執(zhí)行時(shí)間 var sum = 0; for(var i =0 ;i < 100000; i++){ sum = sum/(i+1); } } function repeat(n, action){ for(var i=0; i<n ;i++){ eval(action); // eval函數(shù) } } function benchmark(){ var start = [] , end = [] , timings = []; repeat(100, "start.push(new Date().getTime());f();end.push(new Date().getTime())"); for (var i =0; i< start.length; i++){ timings[i] = end[i] - start[i]; } return timings; } benchmark(); //結(jié)果為:[] //如果我把上面的benchmark中的局部變量移到全局就一切正常.
如果我把上面的benchmark中的局部變量移到全局就一切正常.
這里的eval函數(shù)為何會(huì)產(chǎn)生這種效果?難道相當(dāng)于將eval函數(shù)別名化了?
直接調(diào)用eval()時(shí),它總是在調(diào)用它的上下文作用域內(nèi)執(zhí)行,也就是說(shuō)他可以訪問(wèn)到repeat函數(shù)中的變量,訪問(wèn)不到benchmark函數(shù)中的變量,但是在函數(shù)中是能訪問(wèn)到全局作用域的變量的,所以你把start那些變量設(shè)置成全局變量后,又可以返回想要的結(jié)果了。
function repeat(n, action){ for(var i=0; i<n ;i++){ start.push(new Date().getTime());f();end.push(new Date().getTime()); // eval函數(shù) } }
repeat中訪問(wèn)不到start,end變量
相關(guān)文章
canvas實(shí)現(xiàn)動(dòng)態(tài)小球重疊效果
在javascript運(yùn)動(dòng)系列中,詳細(xì)介紹了各種運(yùn)動(dòng),其中就包括碰壁運(yùn)動(dòng)。但是,如果用canvas去實(shí)現(xiàn),卻是另一種思路。本文將詳細(xì)介紹canvas動(dòng)態(tài)小球重疊效果。下面跟著小編一起來(lái)看下吧2017-02-02html+js實(shí)現(xiàn)動(dòng)態(tài)顯示本地時(shí)間
顯示本地時(shí)間的方法有很多,在本文將為大家介紹下如何使用html+js實(shí)現(xiàn)動(dòng)態(tài)顯示本地時(shí)間,感興趣的朋友可以了解下2013-09-09bootstrap使用validate實(shí)現(xiàn)簡(jiǎn)單校驗(yàn)功能
這篇文章主要為大家詳細(xì)介紹了bootstrap使用validate實(shí)現(xiàn)簡(jiǎn)單校驗(yàn)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12詳解JavaScript如何控制并發(fā)請(qǐng)求數(shù)量
某些情況下,我們可能需要對(duì)需要執(zhí)行的多個(gè)異步任務(wù)進(jìn)行異步數(shù)量控制,只允許固定數(shù)量的任務(wù)執(zhí)行,本文為大家整理了JS控制并發(fā)請(qǐng)求數(shù)量的相關(guān)代碼,希望對(duì)大家有所幫助2024-01-01js防抖函數(shù)和節(jié)流函數(shù)使用場(chǎng)景和實(shí)現(xiàn)區(qū)別示例分析
這篇文章主要介紹了js防抖函數(shù)和節(jié)流函數(shù)使用場(chǎng)景和實(shí)現(xiàn)區(qū)別,結(jié)合實(shí)例形式詳細(xì)分析了js防抖函數(shù)和節(jié)流函數(shù)基本功能、定義、用法區(qū)別及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04javascript預(yù)加載圖片、css、js的方法示例介紹
預(yù)加載的好處可以讓網(wǎng)頁(yè)更快的呈現(xiàn)給用戶,缺點(diǎn)就是可能會(huì)增加無(wú)用的請(qǐng)求,不多說(shuō)了,作為一個(gè)前端攻城師都懂的,下面分享我做的測(cè)試和得到的結(jié)果2013-10-10詳解JavaScript中typeof與instanceof用法
typeof用以獲取一個(gè)變量或者表達(dá)式的類型而instanceof用于判斷一個(gè)變量是否某個(gè)對(duì)象的實(shí)例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-10-10使一個(gè)函數(shù)作為另外一個(gè)函數(shù)的參數(shù)來(lái)運(yùn)行的javascript代碼
使一個(gè)函數(shù)作為另外一個(gè)函數(shù)的參數(shù)來(lái)運(yùn)行的javascript代碼...2007-08-08