您的位置:首页 > 职场人生

Web前端面试指导(三十七):eval是做什么的?

2016-10-10 22:54 1011 查看
题目点评

这题目的看起来比较简单,但是总感觉有没有那么简单,确实是这样子。所以回答这个题目要从不同的角度去回答。首先回答清楚它是干什么的有什么用,然后在谈谈它对作用域的影响,然后就是执行效率的问题,最后谈谈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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息