一个eval()
的运用栗子
1 | // 求数组中的最大值 |
eval()
是全局对象的一个函数属性
参数是一个字符串。如果字符串表示的是表达式,eval()
会对表达式进行求值。
如果 eval()
的参数不是字符串, eval()
会将参数原封不动地返回。
1 | eval(new String("2 + 2")); // 返回了包含"2 + 2"的字符串对象 |
但是,不建议用eval()
- 它使用与调用者相同的权限执行代码,第三方代码可以看到某一个
eval()
被调用时的作用域; 字符串代码被恶意方(不怀好意的人)修改。 - 比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。
用Function
代替eval
1 | new Function ([arg1[, arg2[, ...argN]],] functionBody) |
1 | // eval |
上面代码eval()
要慢得多。
1 | // 我们回到最初那个求max的eval |
1 | // 一个更复杂栗子 |