Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:settimeout问题_Javascript_Function_Settimeout - Fatal编程技术网

Javascript:settimeout问题

Javascript:settimeout问题,javascript,function,settimeout,Javascript,Function,Settimeout,当我启动脚本时,我有以下内容: var my_great_masterpiece = new function () { var self = this; response_xml: function () { if (self.http_request.readyState == 4) { if (self.http_request.status == 404 &a

当我启动脚本时,我有以下内容:

var my_great_masterpiece = new function ()
{
        var self = this;
        response_xml: function ()
        {
            if (self.http_request.readyState == 4)
            {
                if (self.http_request.status == 404 && countXmlUrl <= 3)
                {
                    countXmlUrl++;
                    self.realXmlUrl = xmlUrl[countXmlUrl];
                    self.request_xml();
                }
                if (self.http_request.status == 200)
                {
                    self.xmlDoc = self.http_request.responseXML;
                    self.storage.setItem('domains_raw_xml', self.http_request.responseText);
                    self.main.peter_save_data();
                    self.timervar = setTimeout(function ()
                    {
// ########### Below line gives the error #############################
                        self.new_version_show_window();
                    }, 2000);
                }
            }
        },
        new_version_show_window: function ()
        {
...
}
后来在我的脚本中,我有以下内容:

var my_great_masterpiece = new function ()
{
        var self = this;
        response_xml: function ()
        {
            if (self.http_request.readyState == 4)
            {
                if (self.http_request.status == 404 && countXmlUrl <= 3)
                {
                    countXmlUrl++;
                    self.realXmlUrl = xmlUrl[countXmlUrl];
                    self.request_xml();
                }
                if (self.http_request.status == 200)
                {
                    self.xmlDoc = self.http_request.responseXML;
                    self.storage.setItem('domains_raw_xml', self.http_request.responseText);
                    self.main.peter_save_data();
                    self.timervar = setTimeout(function ()
                    {
// ########### Below line gives the error #############################
                        self.new_version_show_window();
                    }, 2000);
                }
            }
        },
        new_version_show_window: function ()
        {
...
}
response\u xml:function()
{
if(self.http_request.readyState==4)
{

如果(self.http\u request.status==404&&countXmlUrl代码中不清楚定义了
新版本\u show\u window
。也许您可以在self上明确定义它:

self.new_version_show_window = function () {
    /* ... */
}
或者您可以在本地命名空间中定义它,并在setTimeout调用中直接使用它:

self.timervar = setTimeout(function () {
    new_version_show_window();
 }, 2000);
或者简单地说:

self.timervar = setTimeout(new_version_show_window, 2000);
由于,在外部函数中声明的变量在内部函数中也可用

编辑
感谢您发布完整的代码。
新版本\u显示\u窗口
是在
上定义的。main
,因此您必须访问它:

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);

您的代码不清楚在哪里定义了
new\u version\u show\u window
。也许您可以在self上明确定义它:

self.new_version_show_window = function () {
    /* ... */
}
或者您可以在本地命名空间中定义它,并在setTimeout调用中直接使用它:

self.timervar = setTimeout(function () {
    new_version_show_window();
 }, 2000);
或者简单地说:

self.timervar = setTimeout(new_version_show_window, 2000);
由于,在外部函数中声明的变量在内部函数中也可用

编辑
感谢您发布完整的代码。
新版本\u显示\u窗口
是在
上定义的。main
,因此您必须访问它:

self.timervar = setTimeout(function () {
    self.main.new_version_show_window();
 }, 2000);

可能是
self
在JavaScript[1]中是一个保留字。这可能会给您带来一些问题,因此请尝试从不同的角度来命名变量


[1] 可能是
self
在JavaScript[1]中是一个保留字。这可能会给您带来一些问题,因此请尝试从不同的角度命名变量



[1]

这是一个范围问题。新的\u版本\u show\u窗口仅在其调用的构造中的范围内(显然是某种jQuery AJAX函数)。如果您在它现在存在的有限范围之外定义它,它将只对
我的杰作
可用。

这是一个范围问题。新的\u版本\u show\u窗口仅在它被调用的构造中的范围内(显然是某种jQuery AJAX函数)。只有在
my_great_杰作
的有限范围之外定义它时,它才可用。

您是否尝试过将
new_version_show_window
的函数定义移到调用它的位置上方?另外,在
new_version_show_window
前面使用分号而不是逗号。第二个如何连接到第一个部件的部件?您是否设置了
原型?@josh.trow:不,它似乎是一个对象文字。属性用逗号分隔。@josh.trow-您误解了代码。我看不到语法错误。您必须提供更多信息。我们必须知道
新版本\u显示窗口
的位置罚款。现在它可能到处都是……你试过把
新版本显示窗口的函数定义移到调用它的地方吗?另外,在
新版本显示窗口之前使用分号而不是逗号
第二部分是如何连接到第一部分的?你设置了
原型吗?@josh.trow:不,是的eems是一个对象文字。属性用逗号分隔。@josh.trow-您误解了代码。我看不到语法错误。您必须提供更多信息。我们必须知道新版本显示窗口的定义位置。现在它可能无处不在…如果(部分)object literal被用作原型,那么它应该可以工作。但是我们需要更多的信息……是的,你是对的。但是,由于
self
关闭了所有函数,它基本上是一个单例,对于原型来说没有什么意义。@Ryan:正如我所说,我们实际上需要完整的代码。没有办法判断你做错了什么因为我们不知道第二部分在哪个范围内。
new\u version\u show\u window
是在this.main上定义的,所以您必须调用
self.main.new\u version\u show\u window()
成功了!谢谢大家!不知道JS什么时候变得这么复杂了…几年前我曾经处理过一些简单的东西,现在才开始研究它。匿名函数…封装对象…以前从来没有这样做过,现在已经完全失去了。如果不是因为这样,我会大发雷霆的,你们这些很棒的人…谢谢!如果(部分)object literal被用作原型,那么它应该可以工作。但是我们需要更多的信息……是的,你是对的。但是,由于
self
关闭了所有函数,它基本上是一个单例,对于原型来说没有什么意义。@Ryan:正如我所说,我们实际上需要完整的代码。没有办法判断你做错了什么因为我们不知道第二部分在哪个范围内。
new\u version\u show\u window
是在this.main上定义的,所以您必须调用
self.main.new\u version\u show\u window()
奏效了!谢谢大家!不知道JS什么时候变得这么复杂了……几年前我曾经处理过一些简单的东西,现在才开始研究。匿名函数……封装的对象……以前从来没有这样做过,现在已经完全迷失了方向。如果不是因为这样,你们这些了不起的人……谢谢!@Jivings:嗯,我可以告诉你,在浏览器环境中使用它是没有问题的。否则我的很多代码都会被破坏……在函数中定义为局部变量是绝对有可能的。没有其他预定义变量会与之冲突。@Felix-哈哈,好吧,tbh我想我以前也用过它。我只是没看到任何东西否则代码会立即出错。Felix是对的。它可能在这些列表中,但作为局部变量,
self
至少不会造成任何问题。我已经多次使用它,但没有任何问题。@Jivings:好吧,我可以告诉你,在浏览器上下文中使用它没有问题。否则我的许多代码都会被破坏……这肯定是可能的o