900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > JavaScript全局函数eval定义 用法和副作用等实例详解

JavaScript全局函数eval定义 用法和副作用等实例详解

时间:2022-04-12 15:37:30

相关推荐

JavaScript全局函数eval定义 用法和副作用等实例详解

web前端|js教程

JavaScript,eval,js

web前端-js教程

eval()是一个全局函数,javascript通过eval()来解释运行由javascript源代码组成的字符串

疯狂猜成语源码,vscode下载太慢,ubuntu桌面版远程连接不了,tomcat进程编号,sqlite 获取表名称,谷歌php插件,前端三大主流框架为,爬虫通常使用的函数,php 令牌,seo 淘客,漂亮的导航网站,网页生成条形码,手机站免费模板下载工具lzw

720平台源码,vscode包自动提示,ubuntu运行hmcl,tomcat 8.5简介,sqlite使用手册,百度翻译爬虫多线程,常用的php数组函数,富锦seo快排,android 获取网站源码下载,疯狂猜图网页源码,html网站三级模板lzw

var result = eval(3+2);console.log(result,typeof result);//5 umber

用法

winform 聊天源码,ubuntu修改日期,tomcat不识别中文路径,python 爬虫办公,php自荐信,seo实战技巧100例快排留痕lzw

eval()只有一个参数,如果传入的参数不是字符串,它直接返回这个参数。如果参数是字符串,它会把字符串当成javascript代码进行编译。如果编译失败则抛出一个语法错误(syntaxError)异常。如果编译成功,则开始执行这段代码,并返回字符串中的最后一个表达式或语句的值,如果最后一个表达式或语句没有值,则最终返回undefined。如果字符串抛出一个异常,这个异常将把该调用传递给eval()

var num = 1;var str = est;console.log(eval(num));//1console.log(eval(str));//ReferenceError: test is not defined var strLong1 = var x = 1;var y = 2;;console.log(eval(strLong1),x,y);//undefined 1 2var strLong2 = var x = 1; x++;;console.log(eval(strLong2),x);//1 2

作用域

eval()使用了调用它的变量作用域环境。也就是说,它查找变量的值和定义新变量和函数的操作和局部作用域中的代码完全一样

var b = 2;function foo(str,a){eval(str);console.log(a,b);}foo(var b = 3;,1);//1 3

别名

当通过别名调用时,eval()会将其字符串当做顶层的全局代码来执行。执行的代码可能会定义新的全局变量和全局函数,或者给全局变量赋值,但却不能使用或修改函数中的局部变量

var geval = eval; var x = global,y = global; function f(){var x = local;eval(x += "changed";);return x;}function g(){var y = local;geval(y += "changed";);return y;}console.log(f(),x);//localchanged globalconsole.log(g(),y);//local globalchanged

[注意]IE8-浏览器通过别名调用eval()和正常调用eval()的结果相同

副作用

javascript解释器进行了大量的代码分析和优化。而eval()的问题在于,用于动态执行的代码通常不能分析,于是解释器也无法对其进行优化,这会导致性能下降

与eval()类似的有setTimeout()、setInterval()、new Function()等,这些函数都可以以字符串作为参数,在程序运行时动态执行。这种执行机制带来的好处无法抵消其性能上的损失,所以应该尽量避免使用

严格模式

由于eval()函数过于强大,严格模式对其进行了严格的限制

【1】不能通过eval()函数来创建变量或函数,但可以查询和更改其值

use strict;eval(var x = 1;);console.log(x);//ReferenceError: x is not defineduse strict;var x = 1;eval(x = 2;);console.log(x);//2

【2】禁止使用eval作为标识符

use strict;var eval = 10;//SyntaxError: Unexpected eval or arguments in strict mode

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。