再探JS---eval函数

01/01 12:02
阅读数 84

eval函数

“魔鬼”函数?

如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。eval 用的好不好 其实和使用者的水平有关系

作用域

在eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字符串中;它们只在eval()执行的时候创建

为什么不提倡使用eval函数?

  1. 可读性非常差
  2. 不好再做优化和编译
  3. 会轻微增加性能消耗
  4. 不安全,比如 eval input 的值

直接引用 or 间接引用

var a = 1;
(function(){
   
   
    var a = 2;
    eval("console.log(a)");
    //输出为2
    (0, eval)("console.log(a)");
    //输出是1
})()

间接引用eval,语句会被优化至全局作用域
详见stackoverflow

一些奇妙的用途

var arr = [1,2,3,4,5]
function sum(arr) {
   
   
   return eval(arr.join('+'));
}
//输出15
for (var loop = 1; loop < 10; loop++) {
   
   
 		eval('document.getElementById("div"+loop).innerHTML="123"');
}

但很多时候,我们仍能找到其他更高效的的方法替代eval

var obj={
   
   
  name:'lxl',
  age:20
}

//eval
var property = "name";
alert(eval("obj." + property));
 
// 更好的
var property = "name";
alert(obj[property]);	//es6解构赋值
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部