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读取中文COOKIE的解决办法
Feb 15 Javascript
JavaScript Accessor实现说明
Dec 06 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
Jul 04 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
Sep 05 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
Feb 27 Javascript
详解vue-resource promise兼容性问题
Jun 20 Javascript
JS实现的走迷宫小游戏完整实例
Jul 19 Javascript
js实现超级玛丽小游戏
Mar 18 Javascript
Vue触发input选取文件点击事件操作
Aug 07 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面对对象编程的多态
2015/08/12 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
js倒计时抢购实例
2015/12/20 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
如何在Django项目中引入静态文件
2019/07/26 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python 如何实现遗传算法
2020/09/22 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
个人银行贷款担保书
2014/04/01 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
2016年清明节寄语
2015/12/04 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS