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的无限级联下拉框js插件
Oct 29 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
Apr 15 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
Bootstrap 树控件使用经验分享(图文解说)
Nov 06 Javascript
vue下history模式刷新后404错误解决方法
Aug 18 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
原生Js 实现的简单无缝滚动轮播图的示例代码
May 10 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中ob_start()函数的用法
2013/06/24 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
vuex的简单使用教程
2018/02/02 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python生成带有表格的图片实例
2019/02/03 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
北京银河万佳Java面试题
2012/03/21 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
初中体育教学反思
2014/01/14 职场文书
消防应急演练方案
2014/02/12 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
店长岗位职责
2015/02/11 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
公司欠款证明
2015/06/24 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫