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的文章(设置,删除cookies)
Apr 01 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
Sep 01 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
Mar 25 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
Jan 05 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
Jul 21 Javascript
详解Vue中的watch和computed
Nov 09 Javascript
JavaScript执行机制详细介绍
Dec 06 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 模板高级篇总结
2006/12/21 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
layui表格实现代码
2017/05/20 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
Python切换pip安装源的方法详解
2016/11/18 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python3.7 的新特性详解
2019/07/25 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
pandas DataFrame运算的实现
2020/06/14 Python
python中count函数知识点浅析
2020/12/17 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
园林资料员岗位职责
2013/12/30 职场文书
师说教学反思
2014/02/07 职场文书
部门2014年度工作总结
2014/11/12 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
导游词书写之黄山
2019/08/06 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
5道关于python基础 while循环练习题
2021/11/27 Python