将变量传递给setInterval函数

时间:2011-06-01 20:13:45

标签: javascript setinterval

我使用以下代码每隔5秒调用一个jQuery插件

    var now = new Date();

    setInterval('$("#id").myplugin(now)', 1000);

到目前为止,插件看起来像这样:

    (function( $ ){
    $.fn.myplugin = function(now) {
        return this.each(function() {
            alert(now.getTime());
        });
    }
   })( jQuery );

然而我收到错误:

  

未捕获的ReferenceError:现在未定义
  plugins.js:30 Uncaught TypeError:无法调用未定义的方法'getTime'

因此看起来好像现在的时间对象doenst被传递给插件函数,甚至没有在setInterval方法中定义。我可以调用var now = new Date();每次都在插件函数中...但我想知道,为什么它会像这样工作以及如何使它工作;)。很多。

2 个答案:

答案 0 :(得分:5)

使用这样的函数:

var now = new Date();

setInterval(function() {
    $("#id").myplugin(now);
}, 1000);

这样,now的所谓范围被设置为您调用setInterval的函数。否则,它只是您所指的全局对象(window),它没有now

其次,传递一个字符串就像eval()一样,这是不安全和缓慢的:Why is eval unsafe in javascript?

答案 1 :(得分:1)

请改用:

setInterval(function(){$("#id").myplugin(now)}, 1000);