var aa='console.log(123)';
有什么方法可以让字符串里面的函数执行?
不建议使用eval()的原因无非两点:
- 性能不佳
- 安全性
var aa='console.log(123)'; eval(aa)
最重要的一点是安全性,大家都知道,如果能执行字符串里的代码,那么凡是有输入的地方,那都有可能发生XSS攻击等。
使用Function构造会比直接使用eval好一些 Function构造的方法,在 严格模式 下,并没有生效。
var str = 'console.log(123)'; var fn = Function(str); fn();
eval
这个关键字不建议使用,个中原因在秘密花园有解释。
不过花园中只一再提到不要使用eval,并且给了以下示范:
var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1
但却没有给出解决方案,推荐做法,就是通过构造函数为‘期望执行的代码’创建新的函数作用域,尽可能减少对当前作用域的影响/污染
var foo = 1; function test() { var foo = 2; (Function('foo = 3'))();// return foo; } test(); // 2 foo; // 1