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中使用css需要注意的地方小结
Sep 01 Javascript
JS上传图片前实现图片预览效果的方法
Mar 02 Javascript
JavaScript中数组继承的简单示例
Jul 29 Javascript
基于javascript显示当前时间以及倒计时功能
Mar 18 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 jQuery
vue中如何去掉空格的方法实现
Nov 09 Javascript
vue实现文字加密功能
Sep 27 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
如何让vue长列表快速加载
Mar 29 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
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
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
javascript判断office版本示例
2014/04/11 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
python中随机函数random用法实例
2015/04/30 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
心得体会怎么写
2013/12/30 职场文书
茶叶生产计划书
2014/01/10 职场文书
火锅店营销方案
2014/02/26 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
食品销售计划书
2014/04/26 职场文书
个人借条范本
2015/05/25 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python