时间:2021-05-26
今天看代码,遇到一个eval函数的问题,到现在翻了很多博文,还是不是很懂eval函数,有个一直没法理解的代码如下:
function f(){ //模拟程序执行时间 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函数 }}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(); //结果为:[]//如果我把上面的benchmark中的局部变量移到全局就一切正常.如果我把上面的benchmark中的局部变量移到全局就一切正常.
这里的eval函数为何会产生这种效果?难道相当于将eval函数别名化了?
直接调用eval()时,它总是在调用它的上下文作用域内执行,也就是说他可以访问到repeat函数中的变量,访问不到benchmark函数中的变量,但是在函数中是能访问到全局作用域的变量的,所以你把start那些变量设置成全局变量后,又可以返回想要的结果了。
repeat中访问不到start,end变量
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
(1)介绍javascript中的eval函数的用法(2)如何在函数内执行全局代码►先来说eval的用法,内容比较简单,熟悉的可以跳过。eval函数
1)介绍javascript中的eval函数的用法(2)如何在函数内执行全局代码►先来说eval的用法,内容比较简单,熟悉的可以跳过。eval函数接
通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,并返回结果(exec
【eval()函数】JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一
先看看JS的一个函数JavaScripteval()函数定义和用法eval()函数可计算某个字符串,并执行其中的的JavaScript代码。语法eval(str