使用Javascript eval():想知道代码安全性/漏洞

时间:2017-07-20 15:52:30

标签: javascript jquery animation

我的页面中有一个元素列表,我想将jQuery滑动动画应用到。但是,我喜欢它,以便动画按顺序链接,即一个元素只有在前一个动画结束时才会开始动画。

列表的长度是可变的,因此我需要找到一个动态解决方案。 我想出了这个:

function closeYear(year, speed, complete) {
  $(year).next().slideUp(speed, complete);
}

function closeYears(years, speed, complete) {
  if ($(years).length == 1) {
    closeYear($(years).first(), speed, complete);
  } else if ($(years).length > 1) {
    var codeStr = ""
    $(years).slice(0, $(years).length - 1).each(function(k) {
      codeStr = codeStr + "closeYear($(years)[" + k + "],'" + speed + "',";
    });
    codeStr = codeStr + "closeYear($(years).last(),'" + speed + "',complete)" + Array($(years).length).join(")") + ";";

    eval(codeStr);
  }
}

使用上面的代码,我能够完成我想要的,包括能够指定动画的速度,以及在处理完所有内容时执行的complete函数,如下所示:

closeYears($(".year"), "slow", function() {console.log("done!");})

我的问题是关于eval()功能的使用。而且因为我对安全问题不是很了解,我想知道在我的代码,编写方式或者是否有更好/更安全/更智能的方法来做我想做的事情时,有什么值得担心的...

有任何意见吗?

1 个答案:

答案 0 :(得分:1)

您可能只需要一个伪递归函数:

function closeYears(years, speed, complete) {
  (function close(i){
     if(!years[i])  return complete();
     closeYear(years[i],speed,function(){
        close(i+1);        
      } );
 })(0);
}