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 addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
Dec 12 Javascript
深入分析jquery解析json数据
Dec 09 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
vue中添加mp3音频文件的方法
Mar 02 Javascript
Vue render深入开发讲解
Apr 13 Javascript
JavaScript设计模式之代理模式实例分析
Jan 16 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
ES6 Set结构的应用实例分析
Jun 26 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
vue实现axios图片上传功能
Aug 20 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+MSSQL分页的例子
2006/10/09 PHP
php 上传功能实例代码
2010/04/13 PHP
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
javascript常用的方法整理
2015/08/20 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
django云端留言板实例详解
2019/07/22 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python实现按首字母分类查找功能
2019/10/31 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
HTML5制作表格样式
2016/11/15 HTML / CSS
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
党员思想汇报范文
2013/12/30 职场文书
教师一帮一活动总结
2014/07/08 职场文书
客户经理岗位职责
2015/01/31 职场文书
质量承诺书格式范文
2015/04/28 职场文书
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL