您的位置:首页 > Web前端 > JavaScript

javascript之函数动态调用

2015-07-13 15:53 639 查看
jacascript的使用异常灵活,但是呢,也经常会出现各种不安全的因素,函数动态调用就是其中一个例子。

     举个例子, 假设现在我有这样100个函数:
   var fun1 = function () {
   };

   var fun2 = function () {
  };

  var fun3 = function () {
  };

  ....

  var fun100 = function () {
  };

我需要从第一个函数执行到最后一个,怎么办呢?难道是这样?
 fun1();
fun2();
fun3();
...
fun100();

 很明显,绝对不是这样,会调用函数调用到死啊。那很多人会想到eval函数(eval()
函数可计算某个字符串,并执行其中的的 JavaScript 代码。)
 那就可以这样用:
var i;
for (i = 1; i <= 100; ++i) {
    eval("fun" + i)();
}

看起来好像不错,几行代码就调用了所有的函数,但是大家应该只eval是魔鬼,非常非常地不推荐使用eval,那么问题来了,不能用eval,那咋办呢?网上又有很多大神给出了eval的替代方法:

var strToObj = function (str) {
    return new Function("return " + str)();
};
    
var i;
for (i = 1; i <= 100; ++i) {
    strToObj("fun" + i)();
}

 这样好像不错,没用eval,又实现了动态调用,但是真的就这样吗?其实,一直都想复杂了,万能的this就可以解决这个问题了。
瞧瞧:

global = this;

var fun1 = function () {
};

var fun2 = function () {
};

var fun3 = function () {
};

....

var fun100 = function () {
}; 

定义的时候加上前面那句话,使用的时候只需这样:

var i;
for (i = 1; i <= 100; ++i) {
    global["fun" + i]();


这样就简单地解决了动态调用的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: