再探JS"/>
再探JS
eval函数
“魔鬼”函数?
如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。eval 用的好不好 其实和使用者的水平有关系
作用域
在eval()中创建的任何变量或函数都不会被提升,因为在解析代码的时候,它们被包含在一个字符串中;它们只在eval()执行的时候创建
为什么不提倡使用eval函数?
- 可读性非常差
- 不好再做优化和编译
- 会轻微增加性能消耗
- 不安全,比如 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解构赋值
更多推荐
再探JS
发布评论