javascript 以函数名称的字符串动态执行函数
使用 js,有时候需要动态调用函数:知道函数名称字的符串,能够执行该函数。以下介绍2种方法。
使用 eval 方法
eval 方法是在运行时对脚本进行解释执行,eval 通常用在一些需要动态执行字符串,或将字符串转为 javascript 对象的场景,比如将json字符串转为javascript对象。
使用 eval 方法要注意以下几个问题:
安全性:输入字符串可以通过第三方脚本或用户输入与其他命令一起注入。
调试:调试错误很困难 - 没有行号或明显的故障点。
优化:JavaScript解释器不一定会预先编译代码,因为它可能会更改。尽管解释器的效率日益提高,但几乎可以肯定它的运行速度要比本地代码慢。
但是 eval 确实非常强大,没有经验的开发人员很容易过度使用该命令。因此除非别无选择,否组不要使用 eval 。
// 定义方法
function testFunc(str) {
console.log(str);
}
调用
var funcName = "testFunc";
var params = "hello world! eval";
var funcCall = funcName + "('" + params + "');";
var ret = eval(funcCall);
使用 window 变量
方法的定义,其实都是对全局变量 window 的扩展,我们在 F12 调试的时候,经常可以看到这种情况。
// 定义方法
function testFunc(str) {
console.log(str);
}
调用
var funcName = "testFunc";
var params = "hello world! window";
if (window[funcName] != null && typeof window[funcName] === "function") {
window[funcName](params);
}
总结:可以看出,使用方法名称调用方法,第2种方法比较方便。