如何动态执行函数

267 阅读1分钟

动态执行函数就是我们在一个方法里面根据条件不同去执行不同的方法。也就是下面代码所展示的一个内容:

function doSomeThing(item){
  if (item === '1') {
    one()
  } else if(item === '2') {
    two()
  } else if (item === '3') {
    three()
  }
}
function one(){
    // do someThing
};
function two(){
    // do someThing
};
function three(){
    // do someThing
};

当我们要执行对应的方法的时候只需要传入不同的参数即可。 如果当业务逻辑比较复杂,不止上面三个条件呢如果还有 4,5,6等等情况呢 一直if...else if写下去是不是显得代码的可读性变差了。那可能就有人说可以用switch case,如下:

function doSomeThing(item){
    switch (item) {
        case 1:
        one()
        break;
        case 2:
        two()
        break;
        //.....
        default:
                break;
    }
}

这样可读性确实高了,但是身为程序员,我们是不是要想着write less,do more; 那我们能不能直接传入函数名去执行函数方法呢。 下面就是我们要用的动态执行参数的方法 这个时候我们可能在想,如何将一个字符串变为变量呢?

方法一 eval()

直接上代码:

function doSomeThing(item){
    eval(`${item}()`)
}

注意: 当浏览器在严格执行模式时,会抛出异常。不提倡!

方法二 setTimeout()或者setInterval()

这个东西可能大家会有所疑问了,setTimeout这个不是定时器吗,正确用法难道不是这样的吗:

setTimeout(() => {
 // do someThing
}, timeout);

不防我们在控制台试试这句:

setTimeout("var a = 2;console.log(a)", 0);
// 你会发现输出是2

注意: 这里和eval()一样。 不提倡! 其实 还可以使用new Function()将常量变为变量,这里就不再一一列举了。