Web前端面试指导(三十七):eval是做什么的?
2016-10-10 22:54
1011 查看
题目点评
这题目的看起来比较简单,但是总感觉有没有那么简单,确实是这样子。所以回答这个题目要从不同的角度去回答。首先回答清楚它是干什么的有什么用,然后在谈谈它对作用域的影响,然后就是执行效率的问题,最后谈谈eval()的其它作用。这样答下来自己都觉得满意了吧!
eval()的作用
把字符串参数解析成JS代码并运行,并返回执行的结果;
例如:
eval的作用域
说明作用域在它所有的范围内容有效
示例2:
这段代码悲剧了?在IE8及IE8一下的版本就不支持了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/09/e62d42d532c160612ca69a3d718a6bbb)
解决方法:
注意事项
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
其它作用
由JSON字符串转换为JSON对象的时候可以用eval,例如:
这题目的看起来比较简单,但是总感觉有没有那么简单,确实是这样子。所以回答这个题目要从不同的角度去回答。首先回答清楚它是干什么的有什么用,然后在谈谈它对作用域的影响,然后就是执行效率的问题,最后谈谈eval()的其它作用。这样答下来自己都觉得满意了吧!
eval()的作用
把字符串参数解析成JS代码并运行,并返回执行的结果;
例如:
eval("2+3");//执行加运算,并返回运算值。 eval("varage=10");//声明一个age变量
eval的作用域
functiona(){ eval("var x=1"); //等效于 var x=1; console.log(x); //输出1 } a(); console.log(x);//错误 x没有定义
说明作用域在它所有的范围内容有效
示例2:
functiona(){ window.eval("var x=1"); // 等效于window.x=1;定义了全局变量 console.log(x); //输出1 } a(); console.log(x);//输出1
这段代码悲剧了?在IE8及IE8一下的版本就不支持了。
解决方法:
functiona(){ if(window.execScript){ // 支持IE8及以下的版本 window.execScript("var x=1"); } else{ //常用的浏览器都支持 window.eval("var x=1"); } console.log(x); } a(); console.log(x);
注意事项
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
其它作用
由JSON字符串转换为JSON对象的时候可以用eval,例如:
varjson="{name:'Mr.CAO',age:30}"; varjsonObj=eval("("+json+")"); console.log(jsonObj);
相关文章推荐
- Web前端面试指导(十八):用纯CSS创建一个三角形的原理是什么?
- Web前端面试指导(三十九):new操作符具体干了什么呢?
- Web前端面试指导(四十四):什么是响应式开发?
- Web前端面试指导(二十四):事件是什么?如何阻止事件冒泡?
- Web前端面试指导(二十八):什么是闭包,为什么要用它?
- Web前端面试指导(二十六):JSON 格式是什么?你了解吗?
- Web前端面试指导(十二):::before 和:before有什么区别?
- Web前端面试指导(二十七):原型是什么?原型链是什么?
- Web前端面试指导(四十五):页面渲染原理是什么?
- Web前端面试指导(三十二):同步和异步有什么区别?
- Web前端面试指导(十二):::before 和:before有什么区别?
- Web前端面试指导(二十九):Ajax 是什么? 如何创建一个Ajax?
- Web前端面试指导(三十一):谈谈你对this的理解
- Web前端面试指导(九):盒子模型你是怎么理解的?
- Web前端面试指导(五):掌握面试技巧,让面试变得轻松
- Web前端面试指导(十七):一个满屏 品 字布局 如何设计?
- Web前端面试指导(二十二):用js实现千位分隔符,怎么实现?
- Web前端面试指导(十九):CSS样式-如何清除元素浮动?
- Web前端面试指导(三十):JavaScript有几种类型的值?你能画一下他们的内存图吗?
- Web前端面试指导(十三):css样式的优先级是怎么样的?