setTimeout在匿名函数里面

时间:2011-01-07 16:08:53

标签: javascript settimeout anonymous-function

我想在我的jQuery函数中调用editObject(),initalisation调用确实有效,但是setTimeout不起作用,如何让它运行? Console说setTimeout调用时没有定义editObject:

(function($){
    $.fn.extend({

                    ...

                    editObject()

            function editObject() {
                alert("Test!");
                setTimeout('editObject()', 1000);
            }

            return this.each(function() {
                var o = options;
            });
        }
    });
})(jQuery);

感谢您的帮助!

5 个答案:

答案 0 :(得分:8)

它不起作用,因为在匿名函数的范围内声明了editObject(),但是setTimeout()会破坏在全局上下文中传递它的字符串。试试这个:

setTimeout(editObject, 1000);

答案 1 :(得分:5)

你可以试试这个:

setTimeout(function(){ editObject.call() }, 1000);

或者:

setTimeout(arguments.callee, 1000);

答案 2 :(得分:2)

您应该避免使用setTimeout的字符串版本。

我相信,在这种情况下,Javascript正在寻找函数window.editObject,但这不存在。

您应该使用:

setTimeout(editObject,1000);

相反,因为这是在调用时抓取对象的引用,因此该函数将可用于Javascript,以便在超时到期时进行调用

答案 3 :(得分:1)

直接使用函数引用(而不是在全局上下文中计算的字符串),如下所示:

setTimeout(editObject, 1000);

答案 4 :(得分:0)

<强>更新 我当然误解了这个问题,我编辑的原始代码正在运行:

var foo = function () {
    var that = this;
    that.editObject = function() {
      alert('Test');
      setTimeout(that.editObject, 1000);
    }
}
new foo().editObject();

...

每当Javascript引擎尝试调用jQuery函数中定义的“editObject()”时,它就超出了jQuery函数的范围,它实际上是在全局范围内,但是你的editObject()函数是在你的jQuery中定义的功能

您可以在全局范围内创建editObject或创建对jQuery函数的引用,并将其传递给setTimeout调用,如:

var that = this;
that.editObject = function() {
  alert('Test');
  setTimeout(that.editObject(), 1000);
}
相关问题