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 相关文章推荐
jQuery入门问答 整理的几个常见的初学者问题
Feb 22 Javascript
jQuery 创建Dom元素
May 07 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
jQuery简单实现禁用右键菜单
Mar 10 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
VueJs组件prop验证简单介绍
Sep 12 Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 Javascript
详解如何在vue项目中使用layui框架及采坑
May 05 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
2018/08/28 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
一篇.NET面试题
2014/09/29 面试题
经理职责范文
2013/11/08 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2015新学期开学寄语
2015/02/26 职场文书
前台岗位职责范本
2015/04/16 职场文书
交心谈心活动总结
2015/05/11 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
力克胡哲观后感
2015/06/10 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
2022微信温控新功能上线
2022/05/09 数码科技