JavaScript中eval函数的问题
今天看代码,遇到一个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 eval() 函数介绍及应用示例
eval(String) 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回.因此请不要为 eval() 函数传递 String 对象来作为参数. 如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常. 抛出 如
-
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
前面的话 eval和with经常被嫌弃,好像它们的存在就是错误.在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被斥为不规范,矫枉过正.那关于eval和with到底是什么情况呢?本文将详细介绍eval()函数和with语句 eval 定义 eval()是一个全局函数,javascript通过eval()来解释运行由javascript源代码组成的字符串 var result = eval('3+2'); console.log(result,typeof result)
-
JS中eval函数的使用示例
eval(obj) ; 该函数会将 obj 当做代码去执行一遍. 例子: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
-
对js eval()函数的一些见解
一.eval是基本使用规则 •1 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. •2 eval(string) •3 string必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. •4 eval()只有一个参数. •5 eval使用比较不安全,忘慎重使用 二.eval的错误使用方法 •1 如果传入的参数不是字符串,它直接返回这个函数. •2 如果参数是字符串,它会把字符串当成JavaScript代码进行编译,如果编译失败者抛
-
javascript中eval函数用法分析
本文实例分析了javascript中eval函数用法.分享给大家供大家参考.具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数.否则会将字符串当成js代码进行编译,如果编译失败则抛出语法错误(SyntaxError)异常.如果编译成功则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值:如果最后一个表达式或语句没有值,则最终返回undefined.如果字符串抛出异常,则该异常将把该调用传递给eval(); eval()最为重要的是,它使用了调用它的变量
-
JavaScript中的eval()函数详解
eval("1+2"),-> 3 动态判断源代码中的字符串是一种很强大的语言特性,几乎没有必要在实际中应用.如果你使用了eval(),你应当仔细考虑是否真的需要使用它. 一.eval()是一个函数还是一个运算符 eval()是一个函数,但由于它已经被当成运算符来对待了..JavaScript语言的早期版本定义了eval函数,现代JavaScript解释器进行了大量的代码分析和优化.而eval的问题在于,用于动态执行的代码通常来讲不能分析,换句话说,如果一个函数调用了eval,那么
-
JavaScript中eval()函数用法详解
eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 复制代码 代码如下: eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eva
-
JavaScript中的eval()函数使用介绍
在JavaScript中,可以使用eval()函数来解析字符串中的JavaScript代码,并返回相应的代码执行结果: 复制代码 代码如下: console.log(eval("42 * 2"));//84 就本质而言,eval()是JavaScript全局对象的一个函数.比如,上述代码等价于: 复制代码 代码如下: console.log(this.eval("42 * 2"));//84 不过在使用eval()语句时,一般都采用上述第一种做法,也即忽略全局对象直
-
Javascript中eval函数的使用方法与示例
定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回.因此请不要为 eval() 函数传递 String 对象来作为参数. 如果试图覆盖 eval
-
Javascript中eval函数的详细用法与说明
JavaScript有许多小窍门来使编程更加容易.其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它.以下是它的说明 Eval 函数 功能:先解释Javascript代码,然后在执行它 用法:Eval(codeString) codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译. 举个小例子: var the_unevaled_answer = "2 + 3"; var the_
-
Javascript中Eval函数的使用说明
举个小例子: 复制代码 代码如下: var the_unevaled_answer = "2 + 3"; var the_evaled_answer = eval("2 + 3"); alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer); 如果你运行这段eval程序,
-
Javascript中Eval函数的使用
[eval()函数] JavaScript有许多小窍门来使编程更加容易. 其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它. 举个小例子: 复制代码 代码如下: var the_unevaled_answer = "2 + 3"; var the_evaled_answer = eval("2 + 3"); alert("the un-evaled answer is " + the_uneva
-
JavaScript中eval函数的问题
今天看代码,遇到一个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++){
-
javascript中eval和with用法实例总结
本文实例讲述了javascript中eval和with用法.分享给大家供大家参考,具体如下: 我们都知道javascript的作用域机制,但是with和eval有时会"破坏"我们对于作用域的常规理解.下面参考网上资源和自己理解总结一下eval和with的用法. 一.eval 1.eval函数:把一个字符串当作一个js表达式一样去执行它. 2.语法:eval(strScript) 注:参数strScript是必填项 3.使用说明 (1)它是有返回值的,如果参数字符串是一个表达式,就会返回
-
JavaScript中匿名函数的用法及优缺点详解
匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染. 这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美. 一.什么是匿名函数? 在Javascript定义一个函数一般有如下三种方式: 函数关键字(function)语句: function fnMethodName(x){alert(x);} 函数字面量(Function Literals): var fnMethodName = function(x){alert(x);} Function(
-
javaScript中push函数用法实例分析
本文实例讲述了javaScript中push函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 push 方法,将新元素添加到一个数组中,并返回数组的新长度值. arrayObj.push([item1 [item2 [. . . [itemN ]]]]) 参数 arrayObj,必选项.一个 Array 对象. item, item2,. . . itemN, 可选项.该 Array 的新元素. 说明 push
随机推荐
- 详解JavaScript的AngularJS框架中的表达式与指令
- 自己前几天写的无限分类类
- 用InstallShield打包ASP程序的脚本
- Lua性能优化技巧(三):关于表
- Mysql 5.7.18安装方法及启动MySQL服务的过程详解
- .Net Core中使用ref和Span<T>提高程序性能的实现代码
- php mysql PDO 查询操作的实例详解
- TP3.2批量上传文件或图片 同名冲突问题的解决方法
- php连接oracle数据库及查询数据的方法
- 查看所有的Server Variables的环境变量
- WordPress中给媒体文件添加分类和标签的PHP功能实现
- 编写轻量ajax组件02--浅析AjaxPro
- js获取div高度的代码
- DOM精简教程
- 详解C语言中的符号常量、变量与算术表达式
- C#实现在listview中插入图片实例代码
- ListView点击Item展开菜单实现代码详解
- Java实现的获取和判断文件头信息工具类用法示例
- python+matplotlib绘制饼图散点图实例代码
- 利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统