JavaScript中eval函数的问题


Posted in Javascript onJanuary 31, 2016

今天看代码,遇到一个eval函数的问题,到现在翻了很多博文,还是不是很懂eval函数,有个一直没法理解的代码如下:

/*
var start = []
 , end = []
 , timings = [];
*/
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那些变量设置成全局变量后,又可以返回想要的结果了。

function repeat(n, action){
 for(var i=0; i<n ;i++){
  start.push(new Date().getTime());f();end.push(new Date().getTime()); // eval函数
 }
}

repeat中访问不到start,end变量

Javascript 相关文章推荐
javascript[js]获取url参数的代码
Oct 17 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
Oct 20 Javascript
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
JavaScript iframe数据共享接口实现方法
Jan 06 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
Jul 13 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
AngularJS动态添加数据并删除的实例
Feb 27 Javascript
vue框架制作购物车小球动画效果实例代码
Sep 26 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
Apr 26 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
Jan 30 #Javascript
JavaScript中的this机制
Jan 30 #Javascript
实现高性能JavaScript之执行与加载
Jan 30 #Javascript
深入探秘jquery瀑布流的实现
Jan 30 #Javascript
深入分析Javascript事件代理
Jan 30 #Javascript
详解javascript实现瀑布流列式布局
Jan 29 #Javascript
详解javascript实现瀑布流绝对式布局
Jan 29 #Javascript
You might like
谈谈PHP语法(4)
2006/10/09 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
LINUX下线程,GDI类的解释
2016/12/14 面试题
MYSQL支持事务吗
2013/08/09 面试题
银行办公室岗位职责
2014/03/10 职场文书
高中生操行评语
2014/04/25 职场文书
教师个人事迹材料
2014/12/17 职场文书
盲山观后感
2015/06/11 职场文书
赞助商致辞
2015/07/30 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
python如何在word中存储本地图片
2021/04/07 Python
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
Java异常处理try catch的基本用法
2021/12/06 Java/Android
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL